Вопрос

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

Это было полезно?

Решение

Эта статья должна рассказать вам все, что вам нужно знать: " Запуск приложений Java в качестве службы Windows " ; упоминается использование " Java Service Wrapper " (существует издание сообщества под названием YAJSW )

Другие советы

Самое простое решение, которое я нашел для этого на данный момент, - это Менеджер не сосущих услуг

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

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

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

    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>"

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

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

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

РЕДАКТИРОВАТЬ: Я использую YAJSW в течение нескольких лет на нескольких платформах (Windows, несколько Linux ...), и это здорово, разработка продолжается.

С помощью procrun вам нужно скопировать 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%

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

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

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

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

Другим вариантом является winsw: https://github.com/kohsuke/winsw/

Сконфигурируйте xml-файл, чтобы указать имя службы, что выполнять, какие-либо аргументы и т. д. И использовать exe для установки. Пример xml: https://github.com/kohsuke/winsw/tree/master/examples

Я предпочитаю это nssm, потому что это один легкий exe; и конфиг xml легко поделиться / зафиксировать в исходном коде.

PS служба устанавливается путем запуска your-service.exe install

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top