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) в виде сервиса. В зависимости от ключей, сервис может быть:
установлен
удален
запущен в консольном режиме в целях отладки (без установки в качестве сервиса):
Осталось рассмотреть конфигурационный файл. В случае с Apache Felix он выглядит так:
По-моему, особые комментарии не требуются. Скажу лишь, что поскольку файл содержит кириллические буквы, желательно сохранить его в кодировке Cp1251, иначе его название в списке сервисов Windows будет крокозябрами. А о том, что всё это работает и сервис действительно появляется в списке, свидетельствует скриншот из старого топика:
Однако рассмотренный пример интересен еще и тем, что устанавливает на 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 будет крокозябрами. А о том, что всё это работает и сервис действительно появляется в списке, свидетельствует скриншот из старого топика:
Комментарии (3)
RSS свернуть / развернутьSergei_T
Попробую сделать установщичек
для одной программки)
Gangsta
gochu
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.