Как создать службу Windows из Java-приложения - PullRequest
206 голосов
/ 16 сентября 2008

Я только что унаследовал Java-приложение, которое необходимо установить как службу на XP и Vista. Прошло около 8 лет с тех пор, как я использовал окна в любой форме, и мне никогда не приходилось создавать сервис, не говоря уже о чем-то вроде java-приложения (у меня есть jar для приложения и один jar зависимостей - log4j ). Какая магия необходима для запуска этой службы? У меня есть исходный код, поэтому возможны модификации кода, хотя и желательно их избегать.

Ответы [ 19 ]

94 голосов
/ 25 марта 2010

Apache Commons Daemon - хорошая альтернатива. Он имеет Procrun для служб Windows и Jsvc для демонов Unix. Он использует менее строгую лицензию Apache, и Apache Tomcat использует ее как часть себя для работы в Windows и Linux! Работать немного сложнее, но есть исчерпывающая статья с рабочим примером.

Кроме того, вы можете посмотреть в bin \ service.bat в Apache Tomcat , чтобы получить представление о том, как настроить службу. В Tomcat они переименовывают двоичные файлы Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).

Что-то, с чем я боролся при использовании Procrun, ваши методы start и stop должны принимать параметры (String [] argv). Например, «start (String [] argv)» и «stop (String [] argv)» будут работать, но «start ()» и «stop ()» будут вызывать ошибки. Если вы не можете изменить эти вызовы, подумайте о создании класса начальной загрузки, который может обрабатывать эти вызовы в соответствии с вашими потребностями.

65 голосов
/ 16 сентября 2008

Мне повезло с Java Service Wrapper

53 голосов
/ 25 мая 2012

С помощью Apache Commons Daemon вы можете теперь иметь собственное имя исполняемого файла и значок! Вы также можете получить собственный монитор Windows в трее с вашим собственным именем и значком!

Теперь моя служба работает с моим собственным именем и значком (prunsrv.exe), а у монитора в системном трее (prunmgr.exe) также есть мое собственное имя и значок!

  1. Загрузите двоичные файлы Apache Commons Daemon (вам понадобятся prunsrv.exe и prunmgr.exe).
  2. Переименуйте их в MyServiceName.exe и MyServiceNamew.exe соответственно.
  3. Загрузите WinRun4J и используйте прилагаемую программу RCEDIT.exe, чтобы изменить исполняемый файл Apache и встроить свой собственный значок, например:

    > RCEDIT.exe /I MyServiceName.exe customIcon.ico
    > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
    
  4. Теперь установите службу Windows следующим образом (см. документацию для получения дополнительной информации и параметров):

    > MyServiceName.exe //IS//MyServiceName \
      --Install="C:\path-to\MyServiceName.exe" \
      --Jvm=auto --Startup=auto --StartMode=jvm \
      --Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
      --StartClass=com.mydomain.MyClassWithMainMethod
    
  5. Теперь у вас есть служба Windows вашего Jar, которая будет работать с вашим собственным значком и именем! Вы также можете запустить файл монитора, и он будет работать в системном трее с вашим собственным значком и именем.

25 голосов
/ 11 мая 2009

Еще одна опция - WinRun4J . Это настраиваемый модуль запуска Java, который служит хостом службы Windows (32- и 64-разрядные версии) Это открытый исходный код и нет никаких ограничений на его использование.

(полное раскрытие: я работаю над этим проектом).

25 голосов
/ 28 января 2013

Простой способ - NSSM Wrapper Wrapper ( см. Мою запись в блоге ).

17 голосов
/ 02 сентября 2010

Еще один ответ - Еще один Java Service Wrapper , это похоже на хорошую альтернативу Java Service Wrapper, поскольку имеет лучшее лицензирование. Он также предназначен для того, чтобы было легко перейти с JSW на YAJSW. Конечно, для меня, новичка в Windows-серверах и для того, чтобы приложение Java работало как служба, им было очень легко пользоваться.

Некоторые другие, которые я нашел, но не использовал:

  • Java Service Launcher Я не использовал это, потому что работать с ним было сложнее, чем YAJSW. Я не думаю, что это обертка.
  • JSmooth Создание служб Windows не является его основной целью, но можно сделать . Я не использовал это, потому что не было никакой активности с 2007 года.
6 голосов
/ 16 сентября 2008

Я думаю, Java Service Wrapper работает хорошо. Обратите внимание, что есть три способа интеграции вашего приложения. Похоже, вариант 1 будет работать лучше для вас, учитывая, что вы не хотите менять код. Файл конфигурации может немного сойти с ума, но просто помните, что (для варианта 1) программа, которую вы запускаете и для которой вы будете задавать аргументы, является их вспомогательной программой, которая затем запустит вашу программу. Для этого у них есть пример файла конфигурации .

4 голосов
/ 12 октября 2009

JavaService - это LGPL. Это очень легко и стабильно. Настоятельно рекомендуется.

4 голосов
/ 24 августа 2017

С Java 8 мы можем справиться с этим сценарием без каких-либо внешних инструментов. javapackager Утилита, поставляемая с Java 8, позволяет создавать автономные пакеты приложений:

- родной тип Создание автономных пакетов приложений (если это возможно). Используйте параметр -B для предоставления аргументов используемым упаковщикам. Если указан тип, то создается только пакет этого типа. Если тип не указан, используется все.

Следующие значения действительны для типа:

-native type
Generate self-contained application bundles (if possible). Use the -B option to provide arguments to the bundlers being used. If type is specified, then only a bundle of this type is created. If no type is specified, all is used.

The following values are valid for type:

all: Runs all of the installers for the platform on which it is running, and creates a disk image for the application. This value is used if type is not specified.
installer: Runs all of the installers for the platform on which it is running.
image: Creates a disk image for the application. On OS X, the image is the .app file. On Linux, the image is the directory that gets installed.
dmg: Generates a DMG file for OS X.
pkg: Generates a .pkg package for OS X.
mac.appStore: Generates a package for the Mac App Store.
rpm: Generates an RPM package for Linux.
deb: Generates a Debian package for Linux.

В случае окон см. Следующее: doc Мы можем создать MSI или EXE по мере необходимости.

exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.
3 голосов
/ 10 мая 2011

Используйте « winsw », который был написан для Glassfish v3, но в целом хорошо работает с программами на Java.

Требуется установленная среда выполнения .NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...