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上出现了相同的错误。
该问题是由两个原因造成的:
- 引用jvm.dll
在VM上,我使用JDK安装而不是简单的JRE,JAVA_HOME指向JDK bin文件夹。 我不得不将–Jvm参数从“auto”更改为位于JRE子文件夹中的实际jvm.dll文件。
- 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上没有发生此错误(相同的脚本)。
- 使用Apache Commons FTPClient监控进度
- PropertyPlaceholderConfigurer从XML文件读取(Apache Commons配置)
- Apache Commons CSV库中封装的标记和分隔符之间的char无效
- Apache Commons FTPClient.listFiles
- 从现有的OutputStream创建Java-Zip-Archive
- FTPClient.listFiles无法正常工作
- 如何让google guice注入一个自定义记录器,比如一个commons-logging或log4j logger
- 根据Java中的元素属性将列表拆分为多个子列表
- 我何时应该使用Apache Commons的Validate.isTrue,何时应该使用’assert’关键字?