Запустить JAR как службу Windows

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

У меня уже есть JAR с внешним lib dir, я могу запустить его с java -jar My.jar и остановиться с Ctrl+C.

Я также проверил JSL, JSmooth и прокрутку из Apache без рабочего решения.

Мне нужно рабочее решение с хорошим учебником.

Обновление: Мне удалось выполнить как прокрутку (наконец), так и ручную сервисную оболочку .net. Вот код для прокрутки моей версии 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 или что-то подобное)

Благодаря команде прокрутки apache (http://commons.apache.org/proper/commons-daemon//procrun.html) и marifnst (http://a089lp.wordpress.com/tag/procrun-tutorial/)

Обновление 2: новый хороший учебник с winsv: https://dzone.com/articles/spring-boot-as-a-windows-service-in-5-minutes

Ответ 1

Напишите свой собственный сервис из этих образцов:

В onStart вам нужно сделать CreateProcess( "java", "-jar", "MyJar.jar" ), сохранить его PID

В onStop вы должны убить с помощью PID

Ответ 2

Попробуйте эту java-пусковую установку

http://winrun4j.sourceforge.net/

свободный и открытый источник

пример запуска службы в конце страницы

Ответ 3

Вы можете использовать Java Service Wrapper

http://wrapper.tanukisoftware.com/doc/english/download.jsp

Они не распространяют скомпилированную версию версии Comunity Edition версии x86_64, но вы можете ее самостоятельно создать.