Я только что унаследовал Java-приложение, которое необходимо установить в качестве службы на XP и Vista. Прошло около 8 лет с тех пор, как я использовал окна в любой форме, и мне никогда не приходилось создавать сервис, не говоря уже о чем-то вроде java-приложения (у меня есть jar для приложения и один jar для зависимостей - log4j ). Какая магия необходима для запуска этой службы? У меня есть источник, поэтому возможны модификации кода, хотя и желательно их избегать.
java
windows-services
ideasculptor
источник
источник
Ответы:
Мне повезло с Java Service Wrapper
источник
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 ()» вызовут ошибки. Если вы не можете изменить эти вызовы, подумайте о создании класса начальной загрузки, который может обрабатывать эти вызовы в соответствии с вашими потребностями.
источник
--JvmOptions=-Dopt=a#-Dopt2=b
. Я запускал команду из скрипта муравья и из-за этого несколько дней боролся. Надеюсь, поможет.С Apache Commons Daemon теперь вы можете иметь собственное имя исполняемого файла и значок! Вы также можете получить собственный монитор Windows в трее с вашим собственным именем и значком!
Теперь моя служба работает с моим собственным именем и значком (prunsrv.exe), а у монитора в системном трее (prunmgr.exe) также есть мое собственное имя и значок!
MyServiceName.exe
иMyServiceNamew.exe
соответственно.Загрузите WinRun4J и используйте прилагаемую
RCEDIT.exe
программу для изменения исполняемого файла Apache, чтобы встроить свой собственный значок, например:Теперь установите службу Windows следующим образом (см. Документацию для получения дополнительной информации и параметров):
Теперь у вас есть служба Windows вашего Jar, которая будет работать с вашим собственным значком и именем! Вы также можете запустить файл монитора, и он будет работать в системном трее с вашим собственным значком и именем.
источник
Простой способ - это NSSM Wrapper Wrapper ( см. Мою запись в блоге ).
источник
Еще один вариант - WinRun4J . Это настраиваемый модуль запуска Java, который служит хостом службы Windows (32- и 64-разрядные версии). Это открытый исходный код и нет никаких ограничений на его использование.
(полное раскрытие: я работаю над этим проектом).
источник
Еще один ответ - это еще один Java Service Wrapper , это похоже на хорошую альтернативу Java Service Wrapper, поскольку имеет лучшее лицензирование. Он также предназначен для того, чтобы было легко перейти с JSW на YAJSW. Конечно, для меня, новичка в Windows-серверах и попытки запустить приложение Java в качестве службы, его было очень легко использовать.
Некоторые другие я нашел, но в итоге не использовал:
источник
Я думаю, что Java Service Wrapper работает хорошо. Обратите внимание, что есть три способа интеграции вашего приложения. Похоже, вариант 1 будет работать лучше для вас, учитывая, что вы не хотите менять код. Файл конфигурации может немного сойти с ума, но просто помните, что (для варианта 1) программа, которую вы запускаете и для которой вы будете задавать аргументы, является их вспомогательной программой, которая затем запустит вашу программу. У них есть пример файла конфигурации для этого.
источник
Если вы используете Gradle Build Tool, вы можете попробовать мой плагин windows-service , который облегчает использование Apache Commons Daemon Procrun .
Чтобы создать приложение-службу java для Windows с плагином, вам нужно выполнить несколько простых шагов.
Создайте основной класс обслуживания с помощью соответствующего метода.
Включите плагин в свой
build.gradle
файл.Тот же фрагмент скрипта для нового инкубационного механизма плагинов, представленный в Gradle 2.1:
Настройте плагин.
Запустите задачу gradle createWindowsService, чтобы создать дистрибутив службы Windows.
Это все, что вам нужно сделать, чтобы создать простой сервис Windows. Плагин автоматически загружает двоичные файлы Apache Commons Daemon Procrun, распаковывает эти двоичные файлы в каталог распространения службы и создает пакетные файлы для установки / удаления службы.
В
${project.buildDir}/windows-service
каталоге вы найдете исполняемые файлы службы, пакетные сценарии для установки / удаления службы и все библиотеки времени выполнения. Чтобы установить службу, запустите<project-name>-install.bat
и, если вы хотите удалить службу, запустите<project-name>-uninstall.bat
. Для запуска и остановки службы используйте<project-name>w.exe
исполняемый файл.Обратите внимание, что метод обработки службы start должен создать и запустить отдельный поток для выполнения обработки, а затем вернуться. Основной метод вызывается из разных потоков при запуске и остановке службы.
Для получения дополнительной информации, пожалуйста, прочитайте о плагине и Apache Commons Daemon Procrun.
источник
JavaService - это LGPL. Это очень легко и стабильно. Настоятельно рекомендуется.
источник
С Java 8 мы можем справиться с этим сценарием без каких-либо внешних инструментов. Утилита javapackager, поставляемая с java 8, позволяет создавать автономные пакеты приложений:
-native type Создание автономных пакетов приложений (если это возможно). Используйте параметр -B для предоставления аргументов используемым упаковщикам. Если указан тип, то создается только пакет этого типа. Если тип не указан, используется все.
Следующие значения действительны для типа:
В случае окон см. Следующий документ, мы можем создать MSI или EXE по мере необходимости.
источник
Довольно хорошее сравнение различных решений доступно по адресу: http://yajsw.sourceforge.net/#mozTocId284533
Лично нравится launch4j
источник
это просто, как вы должны поставить ярлык в
Windows 7
C:\users\All Users\Start Menu\Programs\Startup
(Admin) илиUser home directory(%userProfile%)
Windows 10: в работе
shell:startup
в своем свойстве -> ярлык -> цель ->
java.exe -jar D:\..\runJar.jar
ПРИМЕЧАНИЕ: это будет работать только после входа в систему
С правами администратора
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar"
Создаст службу windowsесли вы используете тайм-аут,
cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war
но даже с этим вы получите тайм-аут, но в фоновом режиме будет запущен java.exe. Проверьте в диспетчере задачПРИМЕЧАНИЕ. Это будет выполняться при запуске входа в систему Windows (до входа в систему на основе службы '
Startup Type
').Подробное объяснение создания службы windows
источник
Используйте « winsw », который был написан для Glassfish v3, но в целом хорошо работает с программами на Java.
Требуется установленная среда .NET.
источник
Я использовал JavaService раньше с хорошим успехом. Он не обновлялся в течение нескольких лет, но когда я использовал его, он был довольно твердым.
источник
Мне не понравилось лицензирование для Java Service Wrapper. Я пошел с ActiveState Perl, чтобы написать сервис, который делает эту работу.
Я думал о написании сервиса на C #, но мои временные ограничения были слишком жесткими.
источник
Я всегда просто использовать sc.exe (см http://support.microsoft.com/kb/251192 ). Он должен быть установлен на XP с пакетом обновления 1 (SP1), и, если он не в вашем вкусе Vista, вы можете загрузить его с помощью комплекта ресурсов Vista.
Я не сделал ничего слишком сложного с Java, но использование полностью определенного аргумента командной строки (x: \ java.exe ....) или создание сценария с Ant для включения зависимостей и установки параметров отлично работает для меня.
источник
Еще один хороший вариант - FireDaemon . Он используется в некоторых крупных магазинах, таких как NASA, IBM и т. Д .; см. их веб-сайт для полного списка.
источник
В настоящее время мне требуется, чтобы это запускало приложение на основе Eclipse, но мне нужно сначала установить некоторые переменные, которые являются локальными для этого приложения. sc.exe разрешает только исполняемые файлы, но не скрипты, поэтому я обратился к autoexnt.exe, который является частью набора ресурсов Windows 2003 . Он ограничивает службу одним пакетным файлом, но мне нужен только один пакетный сценарий для преобразования в службу.
Чао!
источник
Exe4j - очень хороший вариант, хотя и не бесплатный. Проверьте это в Exe4j. В мастере для создания файла .exe вы можете создать службу.
источник