与Procrun一起安装的Windows服务在// TS模式下工作,但不作为Windows服务启动,说它"已启动然后停止"

111*_*01b 13 java windows-services executable-jar procrun

我通过运行以下命令将标准可执行jar文件安装为Windows服务:

> prunsrv.exe //IS//"My Service" --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
  --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
  --StartClass=com.mydomain.MyService
Run Code Online (Sandbox Code Playgroud)

我现在可以通过运行以下命令(我正在使用Java 1.6)在控制台模式下运行我的程序:

> prunsrv.exe //TS//"My Service"
Run Code Online (Sandbox Code Playgroud)

当我尝试通过标准Windows服务接口启动服务时,我收到以下错误消息:

本地计算机上的MyService服务已启动,然后停止.如果某些服务未被其他服务或程序使用,则会自动停止.

当我尝试以这种方式启动服务时,我的应用程序的日志文件中没有输出.Window的事件日志(Windows 7 64位)中也没有输出.我该怎么做才能找出为什么这项服务无法运行?

111*_*01b 5

不要在服务名称中使用任何空白区域!

经过几个小时的测试并拆分Tomcat并复制它的引导程序后,我的问题的修复最终导致当Windows服务名称中有空格时,Apache Commons Daemon(Procrun)无法正常工作.

当服务名称中有空格时,它似乎正确地在Windows上安装和注册服务.Windows注册表项看起来都是正确的.该服务甚至可以在调试(也称为TS或控制台)模式下运行.但是,当运行时,作为Windows启动的实际服务,如果服务在服务名称中安装了空白,则它将失败.

我当然希望Procrun在失败时有一些类型的日志输出!良好的日志记录可以使调试问题成为现实.

我确实需要在我的服务名称中包含多个单词,因此我使用一个单词命名我的服务并使用"DisplayName"参数更改名称:

> prunsrv.exe //IS//MyService --Install="C:\path-to-prunsrv.exe" --Jvm=auto \
  --Startup=auto --StartMode=jvm --Classpath="C:\path-to-MyService.jar" \
  --StartClass=com.mydomain.MyService --DisplayName="My Service"
Run Code Online (Sandbox Code Playgroud)