问题:OfficeException: failed to start and connect(二)

博客探讨了在重启Tomcat服务后,预览系统因Office组件启动失败的问题。问题集中在LibreOffice在系统服务启动时无法正常启动,而手动或通过startup.bat启动则没有问题。原因是服务启动时使用的LOCALSERVICE账户权限不足,导致无法访问LibreOffice。解决方案是通过命令`sc config Tomcat9 obj=LocalSystem`将Tomcat服务的执行用户改为System。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:OfficeException: failed to start and connect(二)

场景:重启tomcat服务后,预览系统启动不了

输出日志:启动office组件失败,请检查office组件是否可用

报错:org.artofsolving.jodconverter.office.OfficeException: failed to start and connect

原因二:

因为通过不断地重启发现,其实杀不死也能够让soffice被使用,它会沿用存在的soffice,去执行。

回到原点:

为什么会启动office组件失败,请检查office组件是否可用?

再次寻找原因

在不断重启过程中,我发现了项目运行和tomcat的startup.bat启动,是没有任何问题的。

有问题的情况只有:tomcat服务自启动去启动LibreOffice的时候

①当LibreOffice已启动,去启动是没有问题!

②而但LibreOffice未启动,去启动则会报错!

所以tomcat的startup.bat启动和服务自启动的区别是什么?
启动方式优点缺点
系统服务启动系统开机自启动windows系统下导出的线程信息内容不全面
startup.bat启动开机后必须再次双击startup.bat启动,关闭命令窗口服务即停止导出的线程信息比较全面

而最关键的问题:为什么系统服务启动,会导出线程信息内容不全?

因为通过satrtup.bat启动用户为当前登录账户,而通过服务启动的tomcat用户为system用户,有的是local service用户,导出线程信息时,jstack命令需要添加 -F ,不加会提示:

insufficient memory or insufficient privilege to attach

为什么用户权限不足?

Tomcat服务在启动中的用户名是:LOCAL SERVICE

解析:
①LOCAL SERVICE是windows中的内置账户,权限比普通用户Users更小,在Windows中主要作为系统服务或进程的运行账户。
②以LOCAL SERVICE权限运行的程序无法访问内核驱动程序,无法访问除“系统中断”、“System”和“系统空闲处理器百分比”之外的所有进程。注意:以这个帐户权限运行的服务无法访问Active Directory中的数据,只能访问本地电脑的数据。
在这里插入图片描述采用Startup.bat启动的用户名是Administrator
在这里插入图片描述

结论二:

tomcat的startup.bat启动和服务自启动,它们的启动用户不同!所以导致了服务启动的用户对于C:\Program Files\LibreOffice权限不够,最终启动不起来!

解决方式二:

在CMD执行sc config Tomcat9 obj=LocalSystem,将tomcat9.exe的执行用户改为System即可

sc config Tomcat9 obj=LocalSystem
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值