prunsvc не может запустить исполняемый файл Java как службу в Windows 8.1

Я конвертировал java-исполняемый jar-файл в исполняемый файл Windows, используя Launch4j. Я установил его и 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 прервана из-за следующей специфической ошибки службы: Неверная функция.

1 ответ

"Неправильная функция" в сочетании с Java обычно указывает на 32-битное / 64-битное несоответствие между используемой JVM и вызывающей службой.

Использование prunsrv для создания службы объясняет путь к успеху, а в главе 8 рассказывается обо всех возможных причинах, по которым вы можете получить страшную "ошибку: неправильная функция". Поэтому убедитесь, что:

  • prunsrv.exe установлен для правильной архитектуры: 32 или 64 бит в зависимости от архитектуры Windows
  • при запуске командной строки пути и параметры, содержащие пробелы, заключаются в двойные кавычки
  • параметр JVM относится к правильной установке JDK/JRE
  • папка logfiles, файлы stdout.out и stderror.out должны быть доступны для записи

Неверная функция - означает, что вы не реализовали метод "стоп", так как была задана настройка PR_STOPMETHOD= стоп. Итак, если вы не реализовали метод stop или это не статическая функция. Если вы хотите использовать "основной" вместо этого, оставьте эту настройку. и установите PR_STOPPARAMS=stop и внедрите в свой main строку аргумента "stop", чтобы остановить службу.

Другие вопросы по тегам