Как создать службу windows из приложения java
Я только что унаследовал приложение java, которое должно быть установлено в качестве службы на XP и vista. Прошло около 8 лет с тех пор, как я использовал windows в любой форме, и мне никогда не приходилось создавать службу, не говоря уже о чем - то вроде java-приложения (у меня есть jar для приложения и одна зависимость jar-log4j). Какая магия необходима, чтобы сделать этот запуск в качестве службы? У меня есть источник, поэтому модификации кода, хотя и желательно избегать, возможны.
19 ответов:
Мне немного повезло с оболочка службы Java
Apache Commons Daemon является хорошей альтернативой. Он имеет Procrun для служб windows и Jsvc для демонов unix. Он использует менее ограничительную лицензию Apache, и Apache Tomcat использует ее как часть себя для работы на Windows и Linux! Чтобы заставить его работать немного сложно, но есть исчерпывающей статьи С рабочим примером.
кроме того, вы можете посмотреть на bin\service.летучая мышь в 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 () " вызовут ошибки. Если вы не можете изменить эти вызовы, подумайте о создании класса bootstrapper, который может массировать эти вызовы в соответствии с вашим по необходимости.
С Apache Commons Daemon теперь вы можете иметь собственное имя исполняемого файла и значок! вы также можете получить пользовательский монитор лотка Windows с вашим собственным именем и значком!
теперь у меня есть служба, работающая с моим собственным именем и значком (prunsrv.exe) и монитор системного трея (prunmgr.exe) также имеет свое собственное имя и значок!
- скачать двоичные файлы демона Apache Commons (вам понадобится prunsrv.exe и prunmgr.исполняемый.)
- переименовать их в
MyServiceName.exeиMyServiceNamew.exeсоответственно.скачать WinRun4J и с помощью
RCEDIT.exeпрограмма, которая поставляется с ним, чтобы изменить исполняемый файл Apache, чтобы встроить свой собственный значок, как это:> RCEDIT.exe /I MyServiceName.exe customIcon.ico > RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.icoтеперь установите свою службу 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теперь у вас есть Windows сервис вашего кувшина, который будет работать с вашим собственным значком и именем! Вы также можете запустить монитор файл и он будет работать в системном трее свой значок и имя.
еще один вариант WinRun4J. Это настраиваемый Java launcher, который удваивается как хост службы windows (как 32, так и 64-разрядные версии). Он является открытым исходным кодом и нет ограничений на его использование.
(полное раскрытие: я работаю над этим проектом).
самый простой способ-это обертка NSSM фантик ( смотрите запись в моем блоге).
еще один ответ Еще Одна Оболочка Службы Java, это кажется хорошей альтернативой Java Service Wrapper, так как имеет лучшее лицензирование. Он также предназначен для легкого перехода от JSW к YAJSW. Конечно, для меня, совершенно нового для серверов windows и пытающегося получить приложение Java, работающее как служба, это было очень просто в использовании.
некоторые я нашел, но не в конечном итоге с помощью:
- Java Service Launcher Я не использовал это потому что это выглядело более сложным, чтобы получить работу, чем YAJSW. Я не думаю, что это фантик.
- JSmooth создание сервисов окна не является его основной целью, но можно сделать. Я не использовал это, потому что не было активности с 2007 года.
Я думаю Java Service Wrapper работает хорошо. Обратите внимание, что есть тремя способами для интеграции вашего приложения. Похоже, Вариант 1 будет работать лучше для вас, потому что вы не хотите менять код. Файл конфигурации может немного сойти с ума, но просто помните, что (для варианта 1) программа, которую вы запускаете и для которой вы будете указывать аргументы, является их вспомогательной программой, которая затем запустит вашу программу. У них есть пример конфигурационный файл для этого.
JavaService это LGPL. Это очень легко и стабильно. Настоятельно рекомендуемый.
использовать " winsw " который был написан для Glassfish v3, но хорошо работает с программами Java в целом.
требуется установленная среда выполнения .NET.
Я использовал JavaService раньше с хорошим успехом. Он не был обновлен в течение нескольких лет, но был довольно твердым, когда я его использовал.
Мне не понравилось лицензирование для оболочки службы Java. Я пошел с ActiveState Perl, чтобы написать сервис, который выполняет эту работу.
Я думал о написании службы на C#, но мои временные ограничения были слишком жесткими.
Я всегда просто использую sc.exe (см. http://support.microsoft.com/kb/251192). он должен быть установлен на XP с пакетом обновления 1, и если это не в вашем вкусе Vista, вы можете скачать загрузить его с помощью набора ресурсов Vista.
Я не сделал ничего слишком сложного с Java, но используя либо полный аргумент командной строки (x:\java.исполняемый....) или создание скрипта с Ant для включения depencies и установки параметров отлично работает для меня.
очень хорошее сравнение различных решений, предлагаемых в : http://yajsw.sourceforge.net/#mozTocId284533
лично нравится launch4j
С 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.в случае windows обратитесь к следующему doc мы можем создать MSI или exe по мере необходимости.
exe: Generates a Windows .exe package. msi: Generates a Windows Installer package.
еще один хороший вариант-это FireDaemon. Он используется некоторыми крупными магазинами, такими как NASA, IBM и т. д.; см. Их веб-сайт для полного списка.
в настоящее время мне требуется это для запуска приложения на основе Eclipse, но мне нужно сначала установить некоторые переменные, которые являются локальными для этого приложения. Южная Каролина.exe будет разрешать только исполняемые файлы, но не Скрипты, поэтому я обратился к autoexnt.exe, который является частью Windows 2003 resource kit. Он ограничивает службу одним пакетным файлом, но мне нужен только один пакетный скрипт для преобразования в службу.
ЧАО!
это просто, как вы должны поставить ярлык в
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')
если вы используете инструмент Gradle Build, вы можете попробовать мой Windows-service-plugin, что облегчает использование Apache Commons Daemon Procrun.
чтобы создать приложение-службу java windows с плагином, вам нужно пройти несколько простых шагов.
создайте основной класс обслуживания с соответствующим методом.
public class MyService { public static void main(String[] args) { String command = "start"; if (args.length > 0) { command = args[0]; } if ("start".equals(command)) { // process service start function } else { // process service stop function } } }включите плагин в свой
build.gradleфайл.buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0" } } apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"тот же фрагмент скрипта для нового, инкубационного, плагинного механизма, введенного в Gradle 2.1:
plugins { id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0" }настройка плагина.
windowsService { architecture = 'amd64' displayName = 'TestService' description = 'Service generated with using gradle plugin' startClass = 'MyService' startMethod = 'main' startParams = 'start' stopClass = 'MyService' stopMethod = 'main' stopParams = 'stop' startup = 'auto' }выполнить createWindowsService задача gradle для создания дистрибутива службы windows.
это все, что вам нужно сделать, чтобы создать простую службу Windows. Плагин автоматически загрузит Демон Apache Commons Запустите двоичные файлы, извлеките эти двоичные файлы в каталог распространения службы и создайте пакетные файлы для установки/удаления службы.
на
${project.buildDir}/windows-serviceкаталог вы найдете исполняемые файлы службы, пакетные скрипты для установки / удаления службы и все библиотеки времени выполнения. Для установки службы запустите<project-name>-install.batи если вы хотите удалить службу run<project-name>-uninstall.bat. Для запуска и остановки службы используйте<project-name>w.exeисполняемый файл.обратите внимание, что метод служба обработки start должна создать и запустить отдельный поток для выполнения обработки, а затем вернуться. Основной метод вызывается из разных потоков при запуске и остановке сервиса.
для получения дополнительной информации, пожалуйста, прочитайте о плагине и Apache Commons Daemon Procrun.
Exe4j является очень хорошим вариантом, хотя это не бесплатно. Проверьте это на Exe4j в Мастере для создания .exe файл, вы даете возможность создать сервис.
Comments