我试图用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文件。
这可能是很多东西。 首先检查日志。 默认值是在...
%SYSTEMROOT%\ SYSTEM32 \ LogFiles文件\阿帕奇
从那里,你应该能够得到一个更具体的错误。 如类路径,Java的路径,或其他一些选项是无效的。
这样做的原因错误是,我没有重命名prunsrv.exe
到TestService.exe
。 同样Prunmgr.exe必须是TestServicew.exe。
非常重要的是,这些文件被重命名。
如果你开始从服务管理的服务,而不是在命令行中,你需要设置CLASSPATH,JAVA_OPTS等在注册表中。 从这里 :
基本服务的定义注册表项下保持:
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>
我能在我的本地机器上运行的服务,但我得到了在虚拟机上运行的Windows 2012R2同样的错误。
这个问题是两个原因造成:
- 参考JVM.DLL
在VM我使用的JDK安装,而不是一个简单的JRE和JAVA_HOME指向JDK bin文件夹。 我不得不从“自动”的--Jvm参数更改为位于JRE的子文件夹中的实际的jvm.dll文件。
- prunsrv.exe的AMD64版本
Allthough我改变了--Jvm设置,该服务仍然启动过程中显示错误。 我也不得不使用prunsrv.exe的AMD64版本,以解决这个问题。
万一有人发现它有用。 我有同样的问题“传递给系统调用的数据区域是太小”。 这是因为程序不能在STARTMODE = JVM找到的jvm.dll。
解决方案:一切都取决于你STARTMODE。 1)如果“--StartMode”是JVM你必须指定“--jvm”参数为路径JVM.DLL 2)如果“--StartMode”是java或exe文件集“--jvm”参数设置为自动(你的计划将推出作为单独procces命名的java.exe)
我有同样的问题在我的笔记本电脑,但它正在其上具有相同configution别人的笔记本电脑。
我已经检查%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陀螺
我有同样的错误,但我不得不这样做的是运行脚本以管理员身份......显然,在2012年窗口许可制度(在Windows Server 2012上)发生了变化:恩。 Windows Server 2008上并没有出现这个错误(相同的脚本)。