如何在作为服务启动时让Java应用程序通过JACOB调用PowerPoint?

时间:2016-09-23 13:39:54

标签: java windows powerpoint jacob

我有一个Java Web应用程序,必须将PowerPoint幻灯片转码为图像。

为此,此应用程序通过JACOB连接到PowerPoint。

要让应用程序正常运行,我将其部署为服务(使用nssm)。这样做时,由于以下异常,我似乎无法将幻灯片转码为图像

[1;31m[ERROR]    wisdom-error[0;39m [36m{vert.x-eventloop-thread-0}[0;39m - An exception occurred while processing request POST /skillCenter/{portal}/config/add 
com.jacob.com.ComFailException: Invoke of: Open
Source: Microsoft Office PowerPoint 2007
Description: PowerPoint could not open the file.

    at com.jacob.com.Dispatch.invokev(Native Method) ~[jacob-1.18.jar:na]
    at com.jacob.com.Dispatch.invokev(Dispatch.java:625) ~[jacob-1.18.jar:na]
    at com.jacob.com.Dispatch.callN(Dispatch.java:453) ~[jacob-1.18.jar:na]
    at com.jacob.com.Dispatch.call(Dispatch.java:541) ~[jacob-1.18.jar:na]
    at myCompany.myProject.helpers.loaders.powerpoint.MSPowerPoint.getPresentation(MSPowerPoint.java:58) ~[na:na]
    at myCompany.myProject.helpers.loaders.powerpoint.MSPowerPoint.transform(MSPowerPoint.java:139) ~[na:na]

ppt文件显然写在一个文件夹中,而不是由运行该服务的用户写的文件夹(我,在测试用例中)。

使用Process Hacker检查流程时,我显示为启动我的应用程序的流程链的所有者,以及通过svchost.exe启动的PowerPoint。

那么,我的情况有什么问题?为什么powerPoint在作为服务运行时无法访问该文件,当它作为经典流程运行时能完全打开该文件?

编辑1 我尝试使用系统帐户和我的帐户,两个帐户都显示了相同的漏洞。

1 个答案:

答案 0 :(得分:0)

如图所示,Office程序作为服务运行时,需要系统本地用户拥有一个桌面文件夹,否则他们只会发现这些奇怪的错误。

因此,解决此类问题的方法是创建C:\Windows\SysWOW64\config\systemprofile\Desktop(在Windows 64上)文件夹。