prunsrv.exe服务无法启动

我正在尝试使用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% 

将上述配置打包到批处理文件中以执行安装服务

也没有生成日志文件,因为我甚至无法调试。

请告诉我我哪里出错了

一个可能的问题是使用错误的prunsvr.exe 。 对于64位java安装,使用amd64/prunsvr.exe ,对于32位java安装, /prunsvr.exe在commons-deamon-xxx-bin-windows.zip文件中使用/prunsvr.exe

这可能是很多事情。 首先检查日志。 默认是……

%SYSTEMROOT%\ SYSTEM32 \ LogFiles文件\阿帕奇

从那里你应该能够得到更具体的错误。 例如,Classpath,Java路径或其他一些选项无效。

出现此错误的原因是我没有将prunsrv.exe重命名为TestService.exe 。 同样,Prunmgr.exe必须是TestServicew.exe。

重命名这些文件非常重要。

如果从服务管理器而不是命令行启动服务,则需要在注册表中设置CLASSPATH,JAVA_OPTS等。 从这里 :

基本服务定义在注册表项下维护:

 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 

其他参数存储在注册表中:

 HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\\Parameters 

在64位Windows上,procrun始终使用32位注册表视图来存储配置。 这意味着参数将存储在:

 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\ 

我能够在本地计算机上运行该服务,但是在运行Windows 2012R2的VM上出现了相同的错误。

该问题是由两个原因造成的:

  1. 引用jvm.dll

在VM上,我使用JDK安装而不是简单的JRE,JAVA_HOME指向JDK bin文件夹。 我不得不将–Jvm参数从“auto”更改为位于JRE子文件夹中的实际jvm.dll文件。

  1. amd64版本的prunsrv.exe

尽管我改变了-Jvm设置,但服务仍然在启动时显示错误。 我还必须使用amd64版本的prunsrv.exe来解决此问题。

万一有人发现它有用。 我有同样的问题“传递给系统调用的数据区域太小”。 这是因为程序在StartMode = jvm中找不到jvm.dll。

解决方案:全部取决于您的StartMode。 1)如果“–StartMode”是jvm,你必须指定“–jvm”参数作为jvm.dll的路径2)如果“–StartMode”是java或exe设置“–jvm”参数为auto(你的程序)将作为单独的procces启动名为java.exe)

我在我的笔记本电脑上遇到了同样的问题,但它正在开发其他具有相同配置function的笔记本电脑。

我检查了%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

只是将它与我​​的设置脚本进行比较,我看到的唯一直接的事情就是你应该让你的内存设置看起来像

 REM JVM configuration set PR_JVMMS=64m set PR_JVMMX=128m set PR_JVMSS=128m 

顺便说一句,JRE 1.6.0_04有点过时了……

HTH陀螺

我有同样的错误,但我所要做的就是以管理员身份运行脚本(在Windows Server 2012上)…显然,Windows 2012上的权限系统已经改变了:ex。 在Windows Server 2008上没有发生此错误(相同的脚本)。