prunsvc无法在Windows 8.1上运行java可执行文件作为服务

时间:2015-10-21 23:46:31

标签: java windows service prunsrv

我已使用Launch4j将java可执行jar转换为Windows可执行文件。我已经将它和jre安装到了Windows 8盒子的c:\ program files(x86)\ mycomany目录中,并在bat文件中以管理员身份执行以下操作(为了使用prunsvc将应用程序作为服务运行):

function joinLobby(){
  var ses = Parse.Object.extend("Session");
    var query = new Parse.Query(ses);
    query.equalTo("Name", document.getElementById("lobby").value);
    query.find({
    success: function(results) {
      console.log("Successfully retrieved " + results.length );
      // Do something with the returned Parse.Object values
      session = results[0];
      addPlayer(session,player);
      console.log("session joined: "+session.get("Name"));
      console.log("The creator is: "+session.get("Creator").get("Name")); // coming up as undefined
    },
    error: function(error) {
      alert("Error: " + error.code + " " + error.message);
    }
  });  
} 

该服务似乎成功安装;但是当我这样做时:

    rem determine the full path to this bat file
    set thispath=%~dp0

    set SERVICE_NAME=MyService
    set PR_INSTALL=%thispath%prunsrv.exe

    REM set service stdout and stderr
    set PR_LOGPATH=%thispath%
    set PR_STDOUTPUT=%thispath%stdout.txt
    set PR_STDERROR=%thispath%stderr.txt
    set PR_LOGLEVEL=Error

    REM path to java
    set PR_JVM="%thispath%jre1.8.0_45\bin\client\jvm.dll"
    set PR_CLASSPATH="%thispath%jre1.8.0_45\bin\MyService.exe"

    REM Startup configuration
    set PR_STARTUP=auto
    set PR_STARTMODE=jvm
    set PR_STARTCLASS=com.mycompany.mainclass
    set PR_STARTMETHOD=start

    REM Shutdown configuration
    set PR_STOPMODE=jvm
    set PR_STOPCLASS=com.mycompany.mainclass
    set PR_STOPMETHOD=stop

    REM JVM configuration
    set PR_JVMMS=256
    set PR_JVMMX=1024
    set PR_JVMSS=4000
    set PR_JVMOPTIONS=-Duser.language=EN;-Duser.region=en

    set PR_DESCRIPTION="My Service Description"

    "%PR_INSTALL%" install %SERVICE_NAME% 

在管理员命令行,没有任何反应。相反,我在Windows事件日志中看到以下内容:

  

MyService服务以以下特定于服务的方式终止   错误:功能不正确。

2 个答案:

答案 0 :(得分:0)

不正确的功能 - 意味着您没有实现方法“停止”,因为设置已设置为PR_STOPMETHOD = stop。所以,如果你没有实现一个停止方法或它不是静态函数。如果您想使用“main”,请保留此设置。并设置PR_STOPPARAMS =停止并在您的主要实现参数“stop”字符串以停止服务。

答案 1 :(得分:0)

与Java结合使用的“错误函数”通常表示所使用的JVM与调用服务之间存在32位/ 64位不匹配。

Using prunsrv to create a service解释了成功的道路,第8章告诉您所有可能导致可怕的“错误:函数错误”的原因。因此请确保:

    安装了
  • prunsrv.exe以使用正确的体系结构:32或64位,具体取决于Windows体系结构
  • 在运行命令行时,包含空格的路径和选项被双引号
  • JVM参数参考正确的JDK / JRE安装
  • 必须能够访问日志文件文件夹stdout.out和stderror.out日志文件