0

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

    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% 

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

prunsrv.exe start myservice

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

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

4

2 回答 2

1

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

使用 prunsrv 创建服务解释了成功的途径,第 8 章告诉你所有可能的原因,你可能会得到可怕的“错误:不正确的函数”。因此,请确保:

  • 为正确的体系结构安装了 prunsrv.exe:32 位或 64 位,具体取决于 Windows 体系结构
  • 运行命令行时,路径和包含空格的选项用双引号引起来
  • JVM参数参考正确的JDK/JRE安装
  • 日志文件文件夹、stdout.out 和 stderror.out 日志文件必须可访问以进行写入
于 2019-04-12T18:04:56.357 回答
0

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

于 2015-11-24T19:01:38.293 回答