Как заставить приложение Java вызывать PowerPoint через JACOB при запуске в качестве службы?

У меня есть веб-приложение на 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 я являюсь владельцем цепочки процессов, запускающих мое приложение, а также PowerPoint, который запускается через svchost.exe.

Итак, что не так в моем случае? Почему PowerPoint не может получить доступ к файлу при запуске в качестве службы, когда он прекрасно может открыть этот файл при запуске как классический процесс?

РЕДАКТИРОВАТЬ 1 Я попытался использовать системную учетную запись и мою учетную запись, и обе учетные записи выявили один и тот же недостаток.

1 ответ

Решение

Похоже, что программы Office при запуске в качестве службы требуют, чтобы системный локальный пользователь имел папку рабочего стола, в противном случае они просто ошибаются с такими странными ошибками.

Как следствие, решение такой проблемы заключается в создании C:\Windows\SysWOW64\config\systemprofile\Desktop (в Windows 64).

Другие вопросы по тегам