Вопрос-ответ

How to create a windows service from java app

Как создать службу Windows из java-приложения

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

Переведено автоматически
Ответ 1

Демон Apache Commons является хорошей альтернативой. В нем есть 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 (строка [] argv)" и "stop (строка [] argv)" будут работать, но "start()" и "stop ()" вызовут ошибки. Если вы не можете изменить эти вызовы, подумайте о создании класса bootstrapper, который может изменять эти вызовы в соответствии с вашими потребностями.

Ответ 2

Мне немного повезло с оболочкой службы Java

Ответ 3

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

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


  1. Загрузите двоичные файлы демона Apache Commons (вам понадобятся 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, которая будет запускаться с вашим собственным значком и именем! Вы также можете запустить файл monitor, и он будет запускаться в системном трее с вашим собственным значком и именем.


    > MyServiceNamew.exe //MS//MyServiceName


Ответ 4
java