Как создать службу windows из java jar?

У меня есть исполняемый JAR файл. Возможно ли создать службу Windows этого JAR? На самом деле, я просто хочу запустить это при запуске, но я не хочу размещать этот JAR файл в своей загрузочной папке, ни в реестре.

Ответ 2

Самое простое решение, которое я нашел для этого до сих пор, это Non-Sucking Service Manager

Использование будет

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"

Ответ 3

Я экспериментировал с Apache Commons Daemon. Он поддерживает окна (Procrun) и unix (Jsvc). У Advanced Installer есть учебное пособие по Java с примером для загрузки проекта. Если вы используете javaservice.jar, работающий как служба Windows, вы можете проверить его, используя "telnet 4444". Я использовал их пример, потому что основное внимание было уделено запуску службы java windows, а не написанию java.

Ответ 4

Использовать nssm.exe, но не забудьте установить AppDirectory, или любые необходимые библиотеки или ресурсы не будут доступны. По умолчанию nssm устанавливает текущую рабочую директорию в каталог приложения java.exe, а не банку. Для этого создайте пакет script:

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

Это должно устранить проблему с приостановкой службы.

Ответ 5

Tanuki изменила лицензию jsw некоторое время назад, если бы я должен был начать проект, я бы использовал еще один Java Wrapper, http://yajsw.sourceforge.net/ это более или менее реализация с открытым исходным кодом, которая имитирует JWS, а затем строит ее и улучшает ее еще больше.

EDIT: Я несколько лет использую YAJSW на нескольких платормах (Windows, несколько linuxes...), и это здорово, разработка продолжается.

Ответ 6

С прокруткой вам нужно скопировать prunsrv в каталог приложения (скачать) и создать файл install.bat следующим образом:

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

Я предполагаю, что

  • запустите это из той же директории, где jar и prunsrv.exe
  • у jar есть работа MANIFEST.MF
  • и у вас есть завершающие крючки, зарегистрированные в JVM (например, с context.registerShutdownHook() в Spring)...
  • не использовать относительные пути для файлов за пределами jar (например, log4j следует использовать с log4j.appender.X.File = ${app.home}/logs/my.log или что-то подобное)

Проверьте прокрутку руководство и этот учебник для более информация.

Ответ 7

Для этого мы используем Tanuki Service Wrapper. Он очень настраиваемый.