我正在尝试使用prunsrv.exe为应用程序安装和启动服务
我可以安装服务,但服务不会启动并给我一个错误
以下是用于使用prunsrv.exe安装服务的配置
set SERVICE_NAME=TestService
REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\logs
set PR_STDOUTPUT=auto
set PR_STDERROR=auto
set PR_LOGLEVEL=INFO
REM Path to java installation
set PR_JVM=C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
set PR_CLASSPATH=D:\setups\Commons_Daemon\commons-daemon-1.0.14-bin-windows\temp.jar;
REM Startup configuration
set PR_STARTUP=auto
set PR_STARTMODE=java
set PR_STARTCLASS=Trys.AppLauncher
set PR_STARTMETHOD=start
REM Shutdown configuration
set PR_STOPMODE=java
set PR_STOPCLASS=Trys.AppLauncher
set PR_STOPMETHOD=stop
REM JVM configuration
set PR_JVMMS=64
set PR_JVMMX=128
set PR_JVMSS=4000
REM Install service
prunsrv.exe //IS//%SERVICE_NAME%
将上述配置打包到批处理文件中以执行安装服务
也没有生成日志文件,因为我甚至无法调试。
请告诉我哪里出错了
答案 0 :(得分:14)
一个可能的问题是使用了错误的prunsvr.exe
。对于64位Java安装,使用amd64/prunsvr.exe
,对于32位java安装,请在commons-deamon-xxx-bin-windows.zip文件中使用/prunsvr.exe
。
答案 1 :(得分:6)
这可能是很多事情。首先检查日志。默认值为...
%SYSTEMROOT%\ System32下\ LogFiles文件\阿帕奇
从那里你应该能够得到更具体的错误。例如。类路径,Java路径或其他一些选项无效。
答案 2 :(得分:4)
如果从服务管理器而不是命令行启动服务,则需要在注册表中设置CLASSPATH,JAVA_OPTS等。来自here:
基本服务定义在注册表项下维护:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>
其他参数存储在注册表中:
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\<ServiceName>\Parameters
在64位Windows上,procrun始终使用32位注册表视图来存储配置。这意味着参数将存储在:
中HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\<ServiceName>
答案 3 :(得分:4)
出现此错误的原因是我没有将prunsrv.exe
重命名为TestService.exe
。同样,Prunmgr.exe必须是TestServicew.exe。
重要的是重命名这些文件。
答案 4 :(得分:3)
我能够在本地计算机上运行该服务,但是在运行Windows 2012R2的VM上遇到了同样的错误。
问题是由两个原因造成的:
在VM上,我使用JDK安装而不是简单的JRE,JAVA_HOME指向JDK bin文件夹。我不得不从&#34; auto&#34;更改-Jvm参数到位于JRE子文件夹中的实际jvm.dll文件。
尽管我更改了-Jvm设置,但服务仍然在启动时显示错误。我还必须使用amd64版本的prunsrv.exe来解决问题。
答案 5 :(得分:2)
万一有人觉得有帮助。 我有同样的问题“传递给系统调用的数据区域太小”。这是因为程序在StartMode = jvm中找不到jvm.dll。
解决方案:全部取决于您的StartMode。 1)如果“--StartMode”是jvm,你必须指定“--jvm”参数作为jvm.dll的路径 2)如果“--StartMode”是java或exe,则将“--jvm”参数设置为auto(您的程序将作为单独的procces命名为java.exe启动)
答案 6 :(得分:2)
我的笔记本电脑出现了同样的问题,但它正在使用其他具有相同配置功能的笔记本电脑。
我已查看%SystemRoot%\System32\LogFiles\Apache\commons-daemon.log
。我发现以下错误缺少图像文件,
然后我发现我们需要在所有参数上加上双引号。 在您的示例中,如果您尝试
pushd %CD%
请尝试以下操作。
"prunsrv.exe" //IS//%SERVICE_NAME%
--Startup="%PR_STARTUP%"
--Jvm="%PR_JVM%"
--Classpath="%PR_CLASSPATH%"
--StartMode="jvm"
--StopMode="jvm"
--StartClass="%PR_STARTCLASS%"
--StartMethod="%PR_STARTMETHOD%"
--StopClass="%PR_STOPCLASS%"
--StopMethod="%PR_STOPMETHOD%"
示例示例 http://www.eclipse.org/jetty/documentation/current/startup-windows-service.html
答案 7 :(得分:1)
只是将它与我的设置脚本进行比较,我看到的唯一直接的事情是你应该让你的内存设置看起来像
REM JVM configuration
set PR_JVMMS=64m
set PR_JVMMX=128m
set PR_JVMSS=128m
顺便说一下,JRE 1.6.0_04有点过时了......
HTH 陀螺
答案 8 :(得分:1)
我有同样的错误,但我所要做的就是以管理员身份运行脚本(在Windows Server 2012上)...显然,Windows 2012上的权限系统已经改变了:ex。在Windows Server 2008上没有发生此错误(相同的脚本)。