Обертывание JAR как службы NT без доступа к целевым системам

#java #windows-services

#java #windows-службы

Вопрос:

У меня есть Java-приложение, упакованное как runnable JAR, которое мне нужно установить на компьютерах конечных пользователей с Windows.

Приложение должно быть устойчивым и ненавязчивым, я мог бы только предоставить ссылку для пользователей, и они ожидали бы загрузить и установить его (способ Windows, как с NSIS). После установки он должен автоматически запускаться как служба Windows, которая должна быть автоматически настроена для перезапуска при сбое.

Я исследовал эти фреймворки-оболочки:

Поддерживает ли какой-либо из них мой сценарий или может быть интегрирован с install system для его завершения?

Если нет способа добиться этого, я мог бы вернуться к этим вариантам:

  • Перепишите приложение с помощью .NET или C (Windows API), которые имеют встроенную интеграцию со средством services.
  • Предоставьте JAR для загрузки и скажите пользователям поместить его в папку автозагрузки (аналогичный эффект).

Что бы вы предложили?

Комментарии:

1. Что вы подразумеваете под «без доступа к целевым системам»? Как вы можете установить и настроить службу Windows без запуска какой-либо программы установки в вашей целевой системе?

2. @vanje Когда я попробовал базовый пример YAJSW, потребовалось выполнить настройку в целевой системе (запустите мой JAR и проверьте его PID, затем запустите genConfig.bat, затем измените конфигурационный скрипт и, наконец, установите как службу). Мне нужно было бы автоматизировать эти шаги и включить их в исполняемый файл установки.

3. С Apache Commons Daemon вам нужно только вызвать prunsrv.exe с соответствующими параметрами для установки или удаления службы Windows. Это должно быть легко интегрировать в вашу процедуру установки. В качестве примера вы можете посмотреть на документацию Jetty . Существует пакетный файл для установки Jetty в качестве службы Windows.

Ответ №1:

Я просто обернул JAR в исполняемый файл Windows с помощью плагина Maven от Launch4j.

Затем исполняемый файл был распространен среди конечных пользователей в их папки запуска Windows, и в сочетании с опцией Launch4j для автоматического перезапуска при сбое устранил необходимость запускать программу как службу Windows.