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

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

Ответы [ 19 ]

3 голосов
/ 01 августа 2017

Если вы используете Gradle Build Tool, вы можете попробовать мой windows-service-plugin , который облегчает использование Apache Commons Daemon 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. Запустите createWindowsService Задачу gradle для создания дистрибутива службы 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.

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

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

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

2 голосов
/ 13 февраля 2017

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

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

если вы получите timeout , используйте cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war, но даже с этим вы получите timeout, но в фоновом режиме будет запущен java.exe. Проверить в диспетчере задач

ПРИМЕЧАНИЕ. Это будет выполняться при запуске входа в систему Windows (до входа в систему, на основе службы 'Startup Type')

Подробное описание создания службы Windows

2 голосов
/ 30 декабря 2010

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

Лично как launch4j

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

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

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

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

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

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

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

1 голос
/ 23 сентября 2008

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

чао!

0 голосов
/ 17 декабря 2013

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

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