如何让 Java 应用程序在作为服务启动时通过 JACOB 调用 PowerPoint?
How to have a Java application invoke PowerPoint through JACOB when started as a service?
我有一个 Java 网络应用程序,它必须将 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 我尝试同时使用系统帐户和我的帐户,两个帐户都显示出相同的缺陷。
看起来,Office 程序,当 运行 作为服务时,要求系统本地用户有一个桌面文件夹,否则它们只会出现那些奇怪的错误。
因此,解决此类问题的方法是创建一个 C:\Windows\SysWOW64\config\systemprofile\Desktop
(在 Windows 64 上)文件夹。
我有一个 Java 网络应用程序,它必须将 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 我尝试同时使用系统帐户和我的帐户,两个帐户都显示出相同的缺陷。
看起来,Office 程序,当 运行 作为服务时,要求系统本地用户有一个桌面文件夹,否则它们只会出现那些奇怪的错误。
因此,解决此类问题的方法是创建一个 C:\Windows\SysWOW64\config\systemprofile\Desktop
(在 Windows 64 上)文件夹。