Java-приложение как Windows-сервис

По просьбе камрада Gangsta раскрываю подробности работы NSIS-скрипта, описанного в прошлом топике. В нем было перечислено несколько файлов, входящих в тестовый дистрибутив (install.bat, wrapper.properties) и т.п. Что в них находится и зачем они нужны? С точки зрения изучения возможностей установщика NSIS эта информация избыточна: файлы и файлы, которые могли называться как угодно и содержать что угодно. Главное было — положить их в нужную папку на целевой машине. В отладочных целях в том скрипте не был предусмотрен даже автозапуск самопального install.bat (хотя возможности для этого в NSIS есть).

Однако рассмотренный пример интересен еще и тем, что устанавливает на Windows-компьютер Java-приложение в качестве сервиса, а это весьма ценно. Ведь сервис запускается скрытым для обычного пользователя образом (т.е. на экране не маячит дурацкое черное окно), может выполнять привилегированные операции, его можно перезапускать и останавливать. Как всё это реализовать, если речь идет о Java-приложении (в данном случае — Apache Felix)?

Вообще-то, на затронутую тему я уже писал на Мтааламу. Однако было это в самом начале жизни сайта и материал почти никто не заметил (судя по его рейтингу и количеству комментариев). Да и сам топик был беглый: есть, мол такой проект — Java Service Wrapper, посвященный именно запуску Java приложений в качестве сервисов, причем как под Windows, так и под *NIX. Хорошо, что спустя год появился повод вернуться вернуться к этой теме.

Если вы скачаете дистрибутив Java Service Wrapper, то обнаружите там множество файлов на все случаи жизни: для разных версий Windows и Linux. Из них для запуска сервиса на обычной Windows-XP нужны только три:

* wrapper-windows-x86-32.exe
* wrapper-windows-x86-32.dll
* wrapper.jar

плюс конфигурационный файл, настроив который, вы можете запускать любое консольное Java-приложение, имеющее метод public static void main(String[] args) в виде сервиса. В зависимости от ключей, сервис может быть:

установлен

wrapper-windows-x86-32.exe -i <путь к конфигу>


удален

wrapper-windows-x86-32.exe -r <путь к конфигу>


запущен в консольном режиме в целях отладки (без установки в качестве сервиса):

wrapper-windows-x86-32.exe -s <путь к конфигу>


Осталось рассмотреть конфигурационный файл. В случае с Apache Felix он выглядит так:

wrapper.java.command          = C:\Program Files\Java\jre6\bin\java
wrapper.java.classpath.1      = lib/wrapper.jar
wrapper.java.classpath.2      = lib/felix.jar
wrapper.java.library.path.1   = lib
wrapper.java.mainclass        = org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.app.parameter.1       = org.apache.felix.main.Main
wrapper.ntservice.name        = OSGi
wrapper.ntservice.displayname = Служба OSGi (Apache Felix)
wrapper.ntservice.description = Служба OSGi (Apache Felix)


По-моему, особые комментарии не требуются. Скажу лишь, что поскольку файл содержит кириллические буквы, желательно сохранить его в кодировке Cp1251, иначе его название в списке сервисов Windows будет крокозябрами. А о том, что всё это работает и сервис действительно появляется в списке, свидетельствует скриншот из старого топика:

  • +6
  • 25 ноября 2010, 15:21
  • yababay

Комментарии (3)

RSS свернуть / развернуть
+
0
Отличное развернутое описание!
avatar

Sergei_T

  • 25 ноября 2010, 15:46
+
0
Спасибо!
Попробую сделать установщичек
для одной программки)
avatar

Gangsta

  • 25 ноября 2010, 23:27
+
0
Здравствуйте, прошу у ВАС помощи с превращением в сервис OpenAS2 (http://sourceforge.net/projects/openas2/), главной задачей стоит написание визуальной оболочки для консольного приложения, но для начала хочу сделать его сервисом. Вещь серьезная и стоящая внимания, но у меня 1 месяц, чтоб показать результат до конца контракта, своего рода, тест на продление оного. Буду рад любой помощи.
avatar

gochu

  • 12 июня 2012, 01:51

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.