如何使用procrun将documents4j服务器独立安排为windows服务?

时间:2015-02-27 08:38:53

标签: java procrun apache-commons-daemon documents4j

我一直在尝试使用procrun将documents4j作为Windows服务安排进行RTF到PDF的转换,但它不断抛出以下错误:

com.documents4j.throwables.ConversionInputException: The sent input is invalid
    at com.documents4j.util.Reaction$ConversionInputExceptionBuilder.make(Reaction.java:159) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.util.Reaction$ExceptionalReaction.apply(Reaction.java:75) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.ws.ConverterNetworkProtocol$Status.resolve(ConverterNetworkProtocol.java:97) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.job.WebserviceRequestFutureWrapper.handle(WebserviceRequestFutureWrapper.java:48) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.job.WebserviceRequestFutureWrapper.get(WebserviceRequestFutureWrapper.java:38) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.job.WebserviceRequestFutureWrapper.get(WebserviceRequestFutureWrapper.java:13) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at com.documents4j.job.AbstractFutureWrappingPriorityFuture.run(AbstractFutureWrappingPriorityFuture.java:78) ~[documents4j-client-standalone-0.3-SNAPSHOT-shaded.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_31]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_31]
    at java.lang.Thread.run(Unknown Source) [na:1.8.0_31]

我为procrun

创建了以下bat文件

@echo off
set SELF=%CD%
set SERVICE_NAME=PCNService
set SERVICE_URL=
set PR_INSTALL=%SELF%\prunsrv.exe
set PRMGR_INSTALL=%SELF%\prunmgr.exe
 
@REM Service Log Configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=%SELF%\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=Debug
 
@REM Path to Java Installation
set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_05
set PR_JVM=%JAVA_HOME%\jre\bin\server\jvm.dll
set PR_CLASSPATH=%SELF%\documents4j-server-standalone-0.3-SNAPSHOT-shaded.jar
 
@REM JVM Configuration
set PR_JVMOPTIONS=
@REM Startup Configuration
set JETTY_START_CLASS=com.documents4j.standalone.StandaloneServer

set PR_STARTUP=auto
set PR_STARTMODE=java
set PR_STARTCLASS=%JETTY_START_CLASS%
set PR_STARTMETHOD=start
set PR_STARTPARAMS=http://localhost:9998
 
@REM Shutdown Configuration
set PR_STOPMODE=java
set PR_STOPCLASS=%JETTY_START_CLASS%
set PR_STOPMETHOD=stop
set PR_STOPPARAMS=

if "x%1x" == "xx" goto displayUsage
set SERVICE_CMD=%1
shift
if "x%1x" == "xx" goto checkServiceCmd
:checkServiceCmd
if /i %SERVICE_CMD% == install goto doInstall
if /i %SERVICE_CMD% == delete goto doDelete
if /i %SERVICE_CMD% == stop goto doStop
if /i %SERVICE_CMD% == start goto doStart
if /i %SERVICE_CMD% == monitor goto doMonitor
if /i %SERVICE_CMD% == run goto doRun
if /i %SERVICE_CMD% == console goto doConsole

echo Unknown parameter "%SERVICE_CMD%"
:displayUsage
echo.
echo Usage: service.bat install/start/stop/delete
goto end

:doInstall
rem Install the service
echo Installing the service '%SERVICE_NAME%' ...
%PR_INSTALL% //IS//%SERVICE_NAME% ^
  --DisplayName="%SERVICE_NAME%" ^
  --Install="%PR_INSTALL%" ^
  --Startup="%PR_STARTUP%" ^
  --LogPath="%PR_LOGPATH%" ^
  --LogPrefix="%PR_LOGPREFIX%" ^
  --LogLevel="%PR_LOGLEVEL%" ^
  --StdOutput="%PR_STDOUTPUT%" ^
  --StdError="%PR_STDERROR%" ^
  --JavaHome="%JAVA_HOME%" ^
  --Jvm="%PR_JVM%" ^
  --JvmMs="" ^
  --JvmMx="" ^
  --JvmSs="" ^
  --JvmOptions="%PR_JVMOPTIONS%" ^
  --Classpath="%PR_CLASSPATH%" ^
  --StartMode="%PR_STARTMODE%" ^
  --StartClass="%PR_STARTCLASS%" ^
  --StartMethod="%PR_STARTMETHOD%" ^
  --StartParams="%PR_STARTPARAMS%" ^
  --StopMode="%PR_STOPMODE%" ^
  --StopClass="%PR_STOPCLASS%" ^
  --StopMethod="%PR_STOPMETHOD%" ^
  --StopParams="%PR_STOPPARAMS%" ^
  --Type interactive
 
if not errorlevel 1 goto installed
echo Failed to install "%SERVICE_NAME%" service.  Refer to log in %PR_LOGPATH%
goto end
 
:doStart
rem Starting the service
echo Starting the service '%SERVICE_NAME%' ...
%PR_INSTALL% //ES//%SERVICE_NAME% 
if not errorlevel 1 goto started 
echo Failed to start "%SERVICE_NAME%" service.  Refer to log in %PR_LOGPATH%
goto end

:doStop
rem Stop the service
echo Stopping the service '%SERVICE_NAME%' ...
%PR_INSTALL% //SS//%SERVICE_NAME% 
if not errorlevel 1 goto stopped
echo Failed to stop "%SERVICE_NAME%" service.  Refer to log in %PR_LOGPATH%
goto end

:doDelete
rem Delete the service
echo Deleting the service '%SERVICE_NAME%' ...
%PR_INSTALL% //DS//%SERVICE_NAME% 
if not errorlevel 1 goto deleted
echo Failed to delete "%SERVICE_NAME%" service.  Refer to log in %PR_LOGPATH%
goto end

:doMonitor
rem Monitor the service
echo Monitoring the service '%SERVICE_NAME%' ...
echo Look for the service in the system tray. You can modify the properties in the GUI.
%PRMGR_INSTALL% //MR//%SERVICE_NAME%
goto end

:doRun
rem Run the service
echo Running the service '%SERVICE_NAME%' ...
%PR_INSTALL% //RS//%SERVICE_NAME%
goto end

:doEdit
rem Edit the service
echo Editing the service '%SERVICE_NAME%' ...
%PRMGR_INSTALL% //ES//%SERVICE_NAME%
goto end

:doConsole
rem Running the service as console application
%PR_INSTALL% //TS//%SERVICE_NAME%
goto end

:installed
echo The Service "%SERVICE_NAME%" has been installed
goto logging
goto end

:started
echo The Service "%SERVICE_NAME%" has been started 
goto logging
goto end
 
:deleted
echo The Service "%SERVICE_NAME%" has been deleted
goto end

:stopped
echo The Service "%SERVICE_NAME%" has been stopped
goto logging
goto end

:logging
echo Refer to log in %PR_LOGPATH%

:end
</code>

我能够成功安装jar作为Windows服务并启动/停止它

此外,当通过命令行执行com.documents4j.standalone.StandaloneServer类时,转换会正确发生。

1 个答案:

答案 0 :(得分:2)

您是否阅读过使用Word作为Windows服务运行documents4j的信息?

  当作为Windows服务一起运行时,

documents4j可能会出现故障   与MS Office转换。请注意,MS Office没有正式发布   支持在服务上下文中执行。当作为服务运行时,MS   Office始终使用MS Window的本地服务帐户启动   不配置桌面。但是,MS Office希望桌面能够   存在是为了正常运行。没有这样的桌面配置,   MS Office将正确启动但无法读取任何输入文件。在   为了让MS Office在服务上下文中运行,有两个   可能的方法,更推荐第一种方法:

     

在32位系统上,创建文件夹C:\ Windows \ System32 \ config \ systemprofile \ Desktop。在64位系统上,   创建文件夹C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop。

     

可在MSDN上找到更多信息。   您可以操作MS Window的注册表,以便MS Office应用程序使用除本地服务之外的其他帐户运行   帐户。这种方法记录在MSDN上。请注意,这会破坏MS   Window的沙箱模型并对其施加了额外的安全威胁   运行MS Office的机器。