tomcat作为服务启动和开启startup.bat运行,程序运行结果不一样!

xiaoyehuayingwu 2014-07-19 12:27:07
我最近做了一个项目,其中用到了Jacob这个包将Word文档转换为html,但是用此包进行转换需要在jdk的bin目录下加入jacob-1.18-M2-x64.dll(64位)或jacob-1.18-M2-x86.dll(32位)这两个文件,我使用MyEclipse将tomcat启动或者直接启动startup.bat程序都可以正常运行,Word也能够正常转换为html。但是这样每次启动tomcat都很不方便,所以我使用service.bat install 命令将tomcat作为服务,这样就可以设置成开机自动启动,这样一开机就可以用了,通过服务启动的tomcat确实可以正常运行,但是!唯独Word转换为html这个块出了问题!无法转换!但是我查看进程,每次运行Word转html都会新建一个叫做“WINWORD.EXE”的进程。这个实在令我诧异!为什么通过服务启动就不能使用Jacob了呢!然后我在我同学的电脑上也试了一下,跟我情况一样。(我和我同学电脑系统都是win7的)。然后我又用公司的两台xp电脑配了一次,用服务启动,Word都能正常转为html!!难道跟系统有关???这个我就有点不理解了。通过服务启动tomcat和使用startu.bat启动到底有什么区别,或者如果是系统问题,win7和xp在处理这个问题方面又有什么不一样呢??求大神帮忙解决啊!下面是Word转html的相关代码:
// 启动word应用程序(Microsoft Office Word 2003)
ActiveXComponent app = new ActiveXComponent("Word.Application");
System.out.println("*****正在转换...*****");
try
{
// 设置word应用程序不可见
app.setProperty("Visible", new Variant(false));
// documents表示word程序的所有文档窗口,(word是多文档应用程序)
Dispatch docs = app.getProperty("Documents").toDispatch();
// 打开要转换的word文件
Dispatch doc = Dispatch.invoke(
docs,
"Open",
Dispatch.Method,
new Object[] { docfile, new Variant(false),
new Variant(true) }, new int[1]).toDispatch();
// 作为html格式保存到临时文件
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
htmlfile, new Variant(WORD_HTML) }, new int[1]);
// 关闭word文件
Dispatch.call(doc, "Close", new Variant(false));
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
//关闭word应用程序
app.invoke("Quit", new Variant[] {});
}
System.out.println("*****转换完毕********");
}
...全文
2061 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
拾珍珠的人 2021-07-08
  • 打赏
  • 举报
回复

老哥,最后怎么解决的?

nikyotensai 2016-11-21
  • 打赏
  • 举报
回复
欧某某 2016-11-16
  • 打赏
  • 举报
回复
我通过tomcat 的start .bat 或myeclipse 都能实现调用打印机打印word 但是服务启动下程序运行了打印机却没反应
尤尤 2015-08-30
  • 打赏
  • 举报
回复
我尝试过#16的做法,是可以的,但前提是用户重启服务器,需要用管理员登录系统,初始化系统桌面,后面我改为让用户手动启动了。
dosmos20 2015-08-16
  • 打赏
  • 举报
回复
1、要设置Service“允许服务与桌面进行交互” 2、要设置DCOM组件的权限 命令行输入dcomcnfg(64位系统输入comexp.msc -32) 在组件服务-DOCM配置中找到Word,在属性-标识中选择“交互式用户”
  • 打赏
  • 举报
回复
这位大哥,请问你的问题解决了吗?我现在也遇到同样的问题,该解决啊?
humanity 2014-12-13
  • 打赏
  • 举报
回复
Word 转换启动 winword.exe 是正常的,这表示它是直接调用 word 的 OLE 功能,并不是自己来转换。你在 outlook 或 excel 中嵌入一个 word 文件双击word文件后就能发现除了外框看下来没变,其它从菜单到工具栏到窗口内的内容全部被替换成了 word 程序的啊。这时候 excel 只是个外壳,没有任何实际功能。
引用 13 楼 humanity 的回复:
[quote=引用 10 楼 dxqrr 的回复:] jacob这个包可能需要windows底层的某个服务,你开机启动的话,不能保证这个需要的服务一定在你tomcat启动之前就已经运行了
这个有可能,win7 和 xp 在操作系统内置的服务方面的配置肯定略有不同,毕竟 win7 比 xp 多出了很多后台服务,谁知道它们做什么的。 另外你并没有提供当 win7 下失败后有什么错误日志,这个是关键的地方,它能提示我们错误的原因是什么。[/quote]
humanity 2014-12-13
  • 打赏
  • 举报
回复
引用 10 楼 dxqrr 的回复:
jacob这个包可能需要windows底层的某个服务,你开机启动的话,不能保证这个需要的服务一定在你tomcat启动之前就已经运行了
这个有可能,win7 和 xp 在操作系统内置的服务方面的配置肯定略有不同,毕竟 win7 比 xp 多出了很多后台服务,谁知道它们做什么的。 另外你并没有提供当 win7 下失败后有什么错误日志,这个是关键的地方,它能提示我们错误的原因是什么。
gaoqiaocom 2014-12-12
  • 打赏
  • 举报
回复
楼主你的问题解决没有,我也遇到这个问题了~ 求帮助啊 还有上边高手说的 1 通过JNI启动进程 2 读取Process的inputStream(不是每种情况都有效) 完全看不懂啊 - - -- -
shine333 2014-07-27
  • 打赏
  • 举报
回复
引用 9 楼 xiaoyehuayingwu 的回复:
我在有些电脑上可以正常启动,有的电脑上不可以,为什么呢?
到底是有的电脑用服务也很快,有的电脑用startup.bat也很慢?? 还是,如我猜测的那样,慢的都是服务?
dxqrr 2014-07-21
  • 打赏
  • 举报
回复
jacob这个包可能需要windows底层的某个服务,你开机启动的话,不能保证这个需要的服务一定在你tomcat启动之前就已经运行了
xiaoyehuayingwu 2014-07-20
  • 打赏
  • 举报
回复
引用 7 楼 shine333 的回复:
startup.bat运行的时候用的用户是你当前的用户。而服务启动的时候,用的是System用户。 以前碰到过类似问题,用服务启动的进程(Runtime.exec,Process等)时候,会挂起很长时间。后来的用了两种解决方案: 1 通过JNI启动进程 2 读取Process的inputStream(不是每种情况都有效) 至于你这个,不是很清楚具体情况。但是基本上就是我上面说的问题相关
我在有些电脑上可以正常启动,有的电脑上不可以,为什么呢?
shine333 2014-07-20
  • 打赏
  • 举报
回复
补充一下:读取process的inputstream(对于java来说是输入,对于进程来说,是输出)。另外,哪怕进程一个字节也没输出,也是有效果的。
shine333 2014-07-20
  • 打赏
  • 举报
回复
startup.bat运行的时候用的用户是你当前的用户。而服务启动的时候,用的是System用户。 以前碰到过类似问题,用服务启动的进程(Runtime.exec,Process等)时候,会挂起很长时间。后来的用了两种解决方案: 1 通过JNI启动进程 2 读取Process的inputStream(不是每种情况都有效) 至于你这个,不是很清楚具体情况。但是基本上就是我上面说的问题相关
xiaoyehuayingwu 2014-07-19
  • 打赏
  • 举报
回复
引用 5 楼 yyfhz 的回复:
LZ的Service在服务窗体里能看得到吗?如果能看到,试着在登录页面中把允许服务与桌面交互勾上,或者用在登录页面中存入某一个管理员账户密码试试
我照这样做了,还是不行啊!
yyfhz 2014-07-19
  • 打赏
  • 举报
回复
LZ的Service在服务窗体里能看得到吗?如果能看到,试着在登录页面中把允许服务与桌面交互勾上,或者用在登录页面中存入某一个管理员账户密码试试
xiaoyehuayingwu 2014-07-19
  • 打赏
  • 举报
回复
引用 3 楼 yyfhz 的回复:
难道是作为Service启动时的登录身份有问题?或者是Service起早了,Office组件还没发挥作用?
应该不会是Service起早了吧,我是开机之后再手动启动的服务也不行,我想也有可能是Service启动的时候登陆身份有问题,但是具体是什么问题呢?问题又怎么解决呢?为什么有的电脑也可以呢?
yyfhz 2014-07-19
  • 打赏
  • 举报
回复
难道是作为Service启动时的登录身份有问题?或者是Service起早了,Office组件还没发挥作用?
  • 打赏
  • 举报
回复
虽然看不明白,但是好像好厉害的样子,帮顶
xiaoyehuayingwu 2014-07-19
  • 打赏
  • 举报
回复
自己顶一个!!!求回复啊!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧