#java #windows-services
#java #windows-службы
Вопрос:
У меня есть Java-приложение, упакованное как runnable JAR, которое мне нужно установить на компьютерах конечных пользователей с Windows.
Приложение должно быть устойчивым и ненавязчивым, я мог бы только предоставить ссылку для пользователей, и они ожидали бы загрузить и установить его (способ Windows, как с NSIS). После установки он должен автоматически запускаться как служба Windows, которая должна быть автоматически настроена для перезапуска при сбое.
Я исследовал эти фреймворки-оболочки:
- Еще одна оболочка службы Java (YAJSW) — Попробовала, но, похоже, для настройки и установки службы требуется доступ к целевым системам (запустите мой JAR и проверьте его PID, затем запустите genConfig.bat, затем измените конфигурационный скрипт и, наконец, установите как службу).
- Оболочка Java-службы Тануки (JSW) — похожа на YAJSW?
- Демон Apache Commons — Не пробовал
- Launch4j — Используется YAJSW «для генерации wrapper.exe в Windows»?
- Диспетчер служб без отсоса (NSSM) — Только что нашел это
Поддерживает ли какой-либо из них мой сценарий или может быть интегрирован с 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.