通过运行以下命令,我将一个标准的可执行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
现在,通过运行以下命令(我使用的是Java1.6),我可以在控制台模式下运行我的程序:
> prunsrv.exe //TS//"My Service"
当我试图通过标准Windows服务接口启动服务时,我会得到以下错误消息:
本地计算机上的MyService服务启动后停止。一些服务如果没有被其他服务或程序使用,就会自动停止。
当我试图以这种方式启动服务时,应用程序的日志文件中没有输出。窗口的事件日志(Windows 7 64位)中也没有输出。我能做些什么来尝试找出为什么这个服务不能运行呢?
发布于 2012-05-25 14:14:21
不要在服务名称中使用任何空格!
经过几个小时的测试和拆解Tomcat并复制它的引导过程,我的问题的解决方法是,当Windows服务中有空白时,(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"
发布于 2014-06-23 22:42:58
我想提供一些关于上面所说的11101101b的更多信息。(这是我的第一篇帖子,所以请温柔一点!)
我能够通过更改命令的//IS//MyService部分来正确安装服务,并在服务名称中使用空格,我怀疑他也是这样做的。(如果我的假设不正确,我很抱歉。)请注意,开头的双引号位于字符串的开头,而不是服务名称的开头。
"//IS//My Service“
就像他的情况一样,服务安装正确,看起来也是正确的,但它无法启动。我能够通过更改注册表中服务的ImagePath值数据设置来解决这个问题,以便对命令的//RS//My Service部分进行相同的更改。因此,注册表值在其数据设置中有以下内容:
"//RS//My Service“
一切似乎都在顺利进行。
发布于 2015-04-03 13:49:27
由于服务完成任务的原因,此服务器启动并停止,因此它将自动停止。如果你有一个长时间在里面运行的逻辑,它就不会停止。
https://stackoverflow.com/questions/10725890
复制相似问题