16

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

以上配置打包成批处理文件执行安装服务

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

请告诉我哪里出错了

4

9 回答 9

17

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

于 2015-04-01T11:03:02.523 回答
7

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

%SystemRoot%\System32\LogFiles\Apache

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

于 2015-05-10T08:41:35.647 回答
4

如果您从服务管理器而不是命令行启动服务,则需要在注册表中设置 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>
于 2013-07-14T15:40:13.740 回答
4

这个错误的原因是我没有重命名prunsrv.exeTestService.exe. 同样,Prunmgr.exe 必须是 TestServicew.exe。

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

于 2014-02-28T11:15:46.780 回答
4

我能够在本地计算机上运行该服务,但在运行 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 来解决这个问题。

于 2016-10-17T15:20:10.630 回答
3

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

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

于 2016-04-22T10:45:20.757 回答
2

以防有人发现它有帮助。

我有同样的问题“传递给系统调用的数据区域太小”。

这是因为程序在 StartMode=jvm 中找不到 jvm.dll。

解决方案:一切都取决于您的StartMode

  1. 如果--StartModejvm
    您必须将--jvm参数指定为路径jvm.dll
  2. if --StartModeis javaor exe:
    set --jvmparameter as auto(你的程序将作为单独的进程启动java.exe)
于 2016-02-05T11:00:03.573 回答
1

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

于 2014-10-21T07:31:52.990 回答
1

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

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

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

HTH 陀螺仪

于 2013-03-21T09:24:01.247 回答