Вопрос

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

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

Решение

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

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

Демон Apache Commons это хорошая альтернатива.В нем есть Прокрун для служб Windows и JSVC для демонов unix.Он использует менее строгую лицензию Apache, а Apache Tomcat использует ее как часть себя для работы в Windows и Linux!Заставить его работать немного сложно, но есть исчерпывающая статья с рабочим примером.

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

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

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

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

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

Простой способ – это НССМ-обертка Обертка (см. мою запись в блоге).

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

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

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

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

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

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

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

Для типа допустимы следующие значения:

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

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

exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.

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

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

Если вы используете Gradle Build Tool, вы можете попробовать мой плагин службы Windows, что облегчает использование Демон Apache Commons Procrun.

Чтобы создать Java-приложение службы Windows с плагином, вам необходимо выполнить несколько простых шагов.

  1. Создайте основной класс обслуживания с соответствующим методом.

    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
            }
        }
    
    }
    
  2. Включите плагин в свой 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"
    }
    
  3. Настройте плагин.

    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'
    }
    
  4. Бегать создатьWindowsService gradle для создания дистрибутива службы Windows.

Это все, что вам нужно сделать, чтобы создать простую службу Windows.Плагин автоматически загрузит двоичные файлы Apache Commons Daemon Procrun, извлечет эти двоичные файлы в каталог распространения службы и создаст пакетные файлы для установки/удаления службы.

В ${project.buildDir}/windows-service В каталоге вы найдете исполняемые файлы службы, пакетные сценарии для установки/удаления службы и все библиотеки времени выполнения.Для установки службы запустите <project-name>-install.bat и если вы хотите удалить службу, запустите <project-name>-uninstall.bat.Для запуска и остановки использования услуги <project-name>w.exe исполняемый файл.

Обратите внимание, что служба запуска метода должна создать и запустить отдельный поток для выполнения обработки, а затем вернуться.Основной метод вызывается из разных потоков при запуске и остановке службы.

Для получения дополнительной информации прочтите о плагине и демоне Apache Commons Procrun.

я использовал JavaService раньше с хорошим успехом.Он не обновлялся уже пару лет, но когда я им пользовался, он был довольно надежным.

Мне не понравилось лицензирование Java Service Wrapper.Я использовал ActiveState Perl, чтобы написать сервис, который выполняет всю работу.

Я думал о написании сервиса на C#, но у меня было слишком мало времени.

Я всегда просто использую sc.exe (см. http://support.microsoft.com/kb/251192).Он должен быть установлен на XP с пакетом обновления 1, и если он не подходит для вашей версии Vista, вы можете загрузить его с помощью набора ресурсов Vista.

Я не делал ничего слишком сложного с Java, но использование полного аргумента командной строки (x:\java.exe ....) или создание сценария с Ant для включения зависимостей и установки параметров меня вполне устраивает.

Довольно хорошее сравнение различных решений доступно по адресу:http://yajsw.sourceforge.net/#mozTocId284533

Лично мне нравится launch4j

это просто, нужно вставить ярлык

Windows 7 C:\users\All Users\Start Menu\Programs\Startup(Администратор) или 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

Еще один хороший вариант FireDaemon.Его используют некоторые крупные компании, такие как NASA, IBM и т. д.;полный список см. на их веб-сайте.

В настоящее время мне это требуется для запуска приложения на основе Eclipse, но сначала мне нужно установить некоторые переменные, локальные для этого приложения.sc.exe разрешает только исполняемые файлы, но не скрипты, поэтому я обратился к autoexnt.exe, который является частью Ресурсный комплект Windows 2003.Он ограничивает службу одним пакетным файлом, но мне нужен только один пакетный скрипт для преобразования в службу.

Чао!

Exe4j — очень хороший вариант, хотя и не бесплатный.Проверьте это на Exe4j В мастере создания файла .exe вам предоставляется возможность создать службу.

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