prunsrv.exe Service not starting up

2020-06-08 14:04发布

问题:

I am trying to install and start a service with prunsrv.exe for an application

I am able to install the service alright but the service wont start up and gives me an error

Also following is the configuration that is used to install the service using 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%

The above config is packaged to a batch file is executed to install the service

Also the log files are not generated, due which i cant even debug.

Please tell me where i am going wrong

回答1:

one possible issue is using wrong prunsvr.exe. for 64 bit java install, use amd64/prunsvr.exe, for 32 bit java install, use /prunsvr.exe in commons-deamon-xxx-bin-windows.zip file.



回答2:

This could be many things. First check the logs. The default is at...

%SystemRoot%\System32\LogFiles\Apache

From there you should be able to get a more specific error. E.g. Classpath, Java path, or some other option being invalid.



回答3:

The reason for this error was that i did not rename prunsrv.exe to TestService.exe. Similarly Prunmgr.exe has to be TestServicew.exe.

Very important that these files are renamed.



回答4:

If you're starting the service from the Service Manager and not the command line, you need to set the CLASSPATH, JAVA_OPTS etc in the registry. From here:

The basic Service definitions are maintained under the registry key:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\<ServiceName>

Additional parameters are stored in the registry at:

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\ProcRun 2.0\<ServiceName>\Parameters

On 64-bit Windows procrun always uses 32-bit registry view for storing the configuration. This means that parameters will be stored inside:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\ProcRun 2.0\<ServiceName>


回答5:

I was able to run the service on my local machine, but I got the same error on a VM running with Windows 2012R2.

The issue was caused by two reasons:

  1. reference to jvm.dll

On the VM I used a JDK installation instead of a simple JRE and the JAVA_HOME pointed to the JDK bin folder. I had to change the --Jvm parameter from "auto" to the actual jvm.dll file located in the JRE subfolder.

  1. amd64 version of prunsrv.exe

Allthough I changed the --Jvm setting, the service still showed the error during startup. I also had to use the amd64 version of prunsrv.exe to resolve the issue.



回答6:

I had the same issue in my laptop but it was working on others laptop which is having the same configution.

I have checked %SystemRoot%\System32\LogFiles\Apache\commons-daemon.log. I found the following error missing Image File,

Then I found that we need to put double quotes over all the parameters. On your example, If you try

pushd %CD%

Try this below.

"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%"

SAMPLE EXAMPLE http://www.eclipse.org/jetty/documentation/current/startup-windows-service.html



回答7:

In case someone find it helpful. I had the same issue "The data area passed to a system call is too small". This is because program cannot find jvm.dll in StartMode=jvm.

Solution: all depends on your StartMode. 1) if "--StartMode" is jvm you have to specify "--jvm" parameter as path to jvm.dll 2) if "--StartMode" is java or exe set "--jvm" parameter as auto (your program will be launched as separate procces named java.exe)



回答8:

Just compared this with a setup script of mine, the only immediate thing i see is that you should perhaps make your memory settings look like

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

And by the way, JRE 1.6.0_04 is somewhat err outdated...

HTH Gyro



回答9:

I had the same error but all I had to do is run the script as administrator (on windows server 2012)... Apparently the permission system on windows 2012 has changed: ex. on windows server 2008 this error did not occur (same script).