Запустить приложение как службу

Как запустить приложение в виде службы Windows

Создание службы

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad, которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Запустить приложение как службу. 36135 39776189. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776189. картинка Запустить приложение как службу. картинка 36135 39776189.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.

Запустить приложение как службу. 36135 39776190. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776190. картинка Запустить приложение как службу. картинка 36135 39776190.

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

Запустить приложение как службу. 36135 39776191. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776191. картинка Запустить приложение как службу. картинка 36135 39776191.

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

Запустить приложение как службу. 36135 39776192. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776192. картинка Запустить приложение как службу. картинка 36135 39776192.

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

Запустить приложение как службу. 36135 39776193. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776193. картинка Запустить приложение как службу. картинка 36135 39776193.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

Запустить приложение как службу. 36135 39776194. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776194. картинка Запустить приложение как службу. картинка 36135 39776194.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Запустить приложение как службу. 36135 39776195. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776195. картинка Запустить приложение как службу. картинка 36135 39776195.

Удаление службы

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm, можно обойтись и без подтверждения.

Запустить приложение как службу. 36135 39776196. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776196. картинка Запустить приложение как службу. картинка 36135 39776196.

Запуск службы в интерактивном режиме

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».

Запустить приложение как службу. 36135 39776197. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776197. картинка Запустить приложение как службу. картинка 36135 39776197.

А дальше начинаются чудеса Запустить приложение как службу. 36135 39776198. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776198. картинка Запустить приложение как службу. картинка 36135 39776198.Для службы, запущенной в интерактивном режиме, система открывает отдельный изолированный сеанс (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

Запустить приложение как службу. 36135 39776199. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776199. картинка Запустить приложение как службу. картинка 36135 39776199.

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

Запустить приложение как службу. 36135 39776200. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776200. картинка Запустить приложение как службу. картинка 36135 39776200.

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»

Запустить приложение как службу. 36135 39776201. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776201. картинка Запустить приложение как службу. картинка 36135 39776201.

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

Запустить приложение как службу. 36135 39776202. Запустить приложение как службу фото. Запустить приложение как службу-36135 39776202. картинка Запустить приложение как службу. картинка 36135 39776202.

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию

Источник

Статья Создание службы в Windows

Запустить приложение как службу. 6966. Запустить приложение как службу фото. Запустить приложение как службу-6966. картинка Запустить приложение как службу. картинка 6966.

Dragokas

Very kind Developer

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

Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.

При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.

Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:

ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.

Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:

Затем откроем оснастку «Services» и посмотрим результат.

Запустить приложение как службу. sc1 png. Запустить приложение как службу фото. Запустить приложение как службу-sc1 png. картинка Запустить приложение как службу. картинка sc1 png.

Изменять параметры уже созданной службы можно командой Sc config. Например, мне не понравилось отображаемое имя службы и я хочу его изменить:

Запустить приложение как службу. sc2 png. Запустить приложение как службу фото. Запустить приложение как службу-sc2 png. картинка Запустить приложение как службу. картинка sc2 png.

PowerShell может почти все, в том числе и управлять службами Windows. Создать новую службу можно с помощью командлета New-Service. Создадим такой же сервис, как и в предыдущем примере, только добавим к нему описание (Description):

Запустить приложение как службу. sc4 png. Запустить приложение как службу фото. Запустить приложение как службу-sc4 png. картинка Запустить приложение как службу. картинка sc4 png.

В принципе PowerShell имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:

Запустить приложение как службу. 6966. Запустить приложение как службу фото. Запустить приложение как службу-6966. картинка Запустить приложение как службу. картинка 6966.

Dragokas

Very kind Developer

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager.

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.
Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду

которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.

Запустить приложение как службу. nssm1 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm1 png. картинка Запустить приложение как службу. картинка nssm1 png.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.

Запустить приложение как службу. nssm2 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm2 png. картинка Запустить приложение как службу. картинка nssm2 png.

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

Запустить приложение как службу. nssm3 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm3 png. картинка Запустить приложение как службу. картинка nssm3 png.

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

Запустить приложение как службу. nssm4 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm4 png. картинка Запустить приложение как службу. картинка nssm4 png.

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

Запустить приложение как службу. nssm5 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm5 png. картинка Запустить приложение как службу. картинка nssm5 png.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

Запустить приложение как службу. nssm6 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm6 png. картинка Запустить приложение как службу. картинка nssm6 png.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Запустить приложение как службу. nssm7 png. Запустить приложение как службу фото. Запустить приложение как службу-nssm7 png. картинка Запустить приложение как службу. картинка nssm7 png.

Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду

Источник

Как установить программу в качестве службы

Наверняка, многие сталкивались с ситуацией, когда есть необходимость запускать программу до входа пользователя в систему, но в установщике программы нет опции «Установить в качестве службы».

Установка программы в качестве службы

Первые 4 пункта понадобятся лишь в windows 8.1

1 Вызовите боковую панель Windows 8.1. Для этого можно использовать комбинацию клавиш WIN+C.

2 Выберите Поиск:

Запустить приложение как службу. install as service 021. Запустить приложение как службу фото. Запустить приложение как службу-install as service 021. картинка Запустить приложение как службу. картинка install as service 021.

3 В поле поиска введите командная строка. В списке появится позиция Командная строка с системной иконкой.

Нажмите по ней правой кнопкой мыши:

Запустить приложение как службу. install as service 022. Запустить приложение как службу фото. Запустить приложение как службу-install as service 022. картинка Запустить приложение как службу. картинка install as service 022.

4 Выберите Запуск от имени администратора:

Запустить приложение как службу. install as service 023. Запустить приложение как службу фото. Запустить приложение как службу-install as service 023. картинка Запустить приложение как службу. картинка install as service 023.

5 Нажмите Да:

Запустить приложение как службу. install as service 024. Запустить приложение как службу фото. Запустить приложение как службу-install as service 024. картинка Запустить приложение как службу. картинка install as service 024.

6 В командной строке введите путь к программе, которую вы хотите установить в качестве службы, с ключом /installservice и нажать ENTER. Путь необходимо взять в кавычки.

После нажатия на ENTER ответьте «Да» на запрос службы контроля учётных записей:

Запустить приложение как службу. install as service 031. Запустить приложение как службу фото. Запустить приложение как службу-install as service 031. картинка Запустить приложение как службу. картинка install as service 031.

7 Если программа запросит учётные данные для запуска, как в нашем примере, введите реквизиты учётной записи администратора и нажмите ОК:

Запустить приложение как службу. install as service 032. Запустить приложение как службу фото. Запустить приложение как службу-install as service 032. картинка Запустить приложение как службу. картинка install as service 032.

Далее, программа, которую вы установили в качестве службы, сообщит вам об успешной установке службы.

У каждой программы это окно будет разным

Запустить приложение как службу. install as service 033. Запустить приложение как службу фото. Запустить приложение как службу-install as service 033. картинка Запустить приложение как службу. картинка install as service 033.

Зайдите в службы (Выполнить — services.mcs — ENTER) и проверьте, что в списке присутствует только что установленная служба:

Запустить приложение как службу. install as service 034. Запустить приложение как службу фото. Запустить приложение как службу-install as service 034. картинка Запустить приложение как службу. картинка install as service 034.

Удаление службы

Процедура удаления службы схожа с установкой. Отличие лишь в том, что после пути к программе нужно указать ключ /uninstallservice.

Источник

Пилим свою службу Windows – руководство для «не настоящих программистов»

Запустить приложение как службу. j3j57big8bze9751j7 frrcjc7q. Запустить приложение как службу фото. Запустить приложение как службу-j3j57big8bze9751j7 frrcjc7q. картинка Запустить приложение как службу. картинка j3j57big8bze9751j7 frrcjc7q.

Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум потребуется специальный интерфейс для получения команд от системы. А раз есть требования и ограничения, то есть и скрипты, и милые сердцу костылики для преодоления.

Статья будет полезна тем, кто, как и я — «программист не настоящий».

Зачем нужна служба, если есть назначенные задания

В отличие от назначенных заданий служба работает постоянно, запускается при старте ПК и может управляться средствами Windows. А еще регулярно запускаемому скрипту могут понадобиться данные с предыдущего запуска, и может быть полезно получение данных из внешних источников — например, в случае TCP или Web сервера.

Лично мне за последние пять лет приходилось создавать службу три с половиной раза:

Для создания службы можно использовать взрослые языки программирования вроде C. Но если вы не хотите связываться с Visual Studio, то возьмите готовые утилиты. Существуют платные решения вроде FireDaemon Pro или AlwaysUp, но мы традиционно сосредоточимся на бесплатных.

Способ первый. От Microsoft

Этот уже немолодой механизм состоит из двух компонентов: утилиты instsrv.exe для установки сервиса и srvany.exe — процесса для запуска любых исполняемых файлов. Предположим, что мы создали веб-сервер на PowerShell при помощи модуля Polaris. Скрипт будет предельно прост:

Запустить приложение как службу. . Запустить приложение как службу фото. Запустить приложение как службу-. картинка Запустить приложение как службу. картинка .
Работа так называемого «сервера».

Теперь попробуем превратить скрипт в службу. Для этого скачаем Windows Resource Kit Tools, где будут наши утилиты. Начнем с того, что установим пустой сервис командой:

Где WebServ — имя нашего нового сервиса. При необходимости через оснастку services.msc можно задать пользователя, под которым будет запускаться служба, и разрешить взаимодействие с рабочим столом.

Теперь пропишем путь к нашему скрипту при помощи магии реестра. Параметры службы есть в разделе реестра HKLM\SYSTEM\CurrentControlSet\Services\WebServ. В нем нам нужно добавить новый раздел Parameters и создать там строковый параметр Application, указав в нем путь к исполняемому файлу. В случае скрипта PowerShell он будет выглядеть так:

Запустить приложение как службу. 2c9azwf tlvz6cs2ez4jlw7pl58. Запустить приложение как службу фото. Запустить приложение как службу-2c9azwf tlvz6cs2ez4jlw7pl58. картинка Запустить приложение как службу. картинка 2c9azwf tlvz6cs2ez4jlw7pl58.
Настроенная служба.

Можно запустить и радоваться.

Запустить приложение как службу. 4jqhkdbgssb6gv8el qpnfn4wea. Запустить приложение как службу фото. Запустить приложение как службу-4jqhkdbgssb6gv8el qpnfn4wea. картинка Запустить приложение как службу. картинка 4jqhkdbgssb6gv8el qpnfn4wea.
Работающая служба.

Однако у этого способа есть недостатки:

Поэтому перейдем к методу, частично лишенному этих проблем.

Способ второй, почти взрослый

Существует утилита под названием NSSM — Non-Sucking Service Manager, что можно перевести как не-плохой менеджер служб. В отличие от предыдущей, она поддерживается разработчиком, и исходный код опубликован на сайте. Помимо обычного способа, доступна и установка через пакетный менеджер Chocolately.

Создать сервис можно из обычной командной строки, вооружившись документацией на сайте разработчика. Но мы воспользуемся PowerShell. Потому что можем, разумеется.

Запустить приложение как службу. . Запустить приложение как службу фото. Запустить приложение как службу-. картинка Запустить приложение как службу. картинка .
Установка через PowerShell.

Для разнообразия проверим работу службы не браузером, а тоже через PowerShell командой Invoke-RestMethod.

Запустить приложение как службу. image loader. Запустить приложение как службу фото. Запустить приложение как службу-image loader. картинка Запустить приложение как службу. картинка image loader.
И вправду работает.

В отличие от srvany, этот метод позволяет перезапускать приложение на старте, перенаправлять stdin и stdout и многое другое. В частности, если не хочется писать команды в командную строку, то достаточно запустить GUI и ввести необходимые параметры через удобный интерфейс.

GUI запускается командой:

Запустить приложение как службу. . Запустить приложение как службу фото. Запустить приложение как службу-. картинка Запустить приложение как службу. картинка .
Настроить можно даже приоритет и использование ядер процессора.

Действительно, возможностей куда больше, чем у srvany и ряда других аналогов. Из минусов бросается в глаза недостаточный контроль над всем процессом.

Налицо нехватка «жести». Поэтому я перейду к самому хардкорному методу из всех опробованных.

Способ третий. AutoIT

Поскольку я давний любитель этого скриптового языка, то не смог пройти мимо библиотеки под названием _Services_UDF v4. Она снабжена богатой документацией и примерами, поэтому под спойлером сразу приведу полный текст получившегося скрипта.

Итак, попробуем «завернуть» в нее наш веб-сервис:

Разберу подробнее момент запуска приложения. Он начинается после операции $bServiceRunning = True и превращается в, казалось бы, бесконечный цикл. На самом деле этот процесс прервется, как только служба получит сигнал о завершении — будь то выход из системы или остановка вручную.

Поскольку программа для скрипта является внешней (powershell.exe), то после выхода из цикла нам нужно закончить ее работу с помощью ProcessClose.

Для этого скрипт необходимо скомпилировать в .exe, а затем установить службу, запустив exe с ключом -i.

Запустить приложение как службу. . Запустить приложение как службу фото. Запустить приложение как службу-. картинка Запустить приложение как службу. картинка .
Оно работает!

Разумеется, этот способ не самый удобный, и все дополнительные возможности придется реализовывать самостоятельно, будь то повторный запуск приложения при сбое или ротация логов. Но зато он дает полный контроль над происходящим. Да и сделать в итоге можно куда больше — от уведомления в Telegram о сбое службы до IPC-взаимодействия с другими программами. И вдобавок — на скриптовом языке, без установки и изучения Visual Studio.

Расскажите, а вам приходилось превращать скрипты и приложения в службы?

Источник

Как запустить приложение в виде службы Windows

Можно ли запустить клиентское приложение в качестве службы? В одной из статей я описывал способы создания службы Windows штатными средствами ОС. Однако не каждое консольное приложение сможет запуститься как служба, а программы с графическим интерфейсом в принципе не умеют работать подобным образом. Но возможность запустить приложение как службу все же есть, и поможет нам в этом программа с оригинальным названием Non-Sucking Service Manager.

NSSM представляет из себя свободное программное обеспечение с открытым кодом и поддерживает все операционные системы Microsoft, начиная с Windows 2000 и заканчивая Windows 8. NSSM не требует установки, достаточно его загрузить и распаковать. В дистрибутив входят версии для 32- и 64-разрядных ОС. Взять программу можно с сайта nssm.cc, на данный момент последняя стабильная версия 2.21.1, которую я и буду использовать.

Для демонстрации возможностей NSSM попробуем запустить Блокнот Windows в качестве службы на Windows 8.1.

Создание службы

Запустить приложение как службу. nssm1. Запустить приложение как службу фото. Запустить приложение как службу-nssm1. картинка Запустить приложение как службу. картинка nssm1.

Также на этапе создания новой службы можно указать некоторые дополнительные параметры.

На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.

Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:

• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.

Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.

Запустить приложение как службу. nssm2. Запустить приложение как службу фото. Запустить приложение как службу-nssm2. картинка Запустить приложение как службу. картинка nssm2.

По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.

Запустить приложение как службу. nssm3. Запустить приложение как службу фото. Запустить приложение как службу-nssm3. картинка Запустить приложение как службу. картинка nssm3.

На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.

Запустить приложение как службу. nssm4. Запустить приложение как службу фото. Запустить приложение как службу-nssm4. картинка Запустить приложение как службу. картинка nssm4.

На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.

Запустить приложение как службу. nssm5. Запустить приложение как службу фото. Запустить приложение как службу-nssm5. картинка Запустить приложение как службу. картинка nssm5.

Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:

nssm install notepad ″C:\Windows\system32\notepad.exe″

Управление службой

После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.

Запустить приложение как службу. nssm6. Запустить приложение как службу фото. Запустить приложение как службу-nssm6. картинка Запустить приложение как службу. картинка nssm6.

А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.

Запустить приложение как службу. nssm7. Запустить приложение как службу фото. Запустить приложение как службу-nssm7. картинка Запустить приложение как службу. картинка nssm7.

Удаление службы

Запустить приложение как службу. nssm8. Запустить приложение как службу фото. Запустить приложение как службу-nssm8. картинка Запустить приложение как службу. картинка nssm8.

Запуск службы в интерактивном режиме

Основное отличие пользовательского приложения от службы заключается в том, что после запуска приложение может требовать для продолжения работы дополнительных действий со стороны пользователя — например нажать кнопку или ввести команду. Для этого необходимо получить к нему доступ, что как оказывается, не так-то просто сделать.

Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».

Запустить приложение как службу. nssm9. Запустить приложение как службу фото. Запустить приложение как службу-nssm9. картинка Запустить приложение как службу. картинка nssm9.

А дальше начинаются чудеса 🙂 Cлужба, запущенная в интерактивном режиме, открывается в изолированном сеансе (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.

А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0.

Запустить приложение как службу. nssm10. Запустить приложение как службу фото. Запустить приложение как службу-nssm10. картинка Запустить приложение как службу. картинка nssm10.

После чего открываем консоль PowerShell и стартуем службу обнаружения командой:

Запустить приложение как службу. nssm11. Запустить приложение как службу фото. Запустить приложение как службу-nssm11. картинка Запустить приложение как службу. картинка nssm11.

Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»

Запустить приложение как службу. nssm12. Запустить приложение как службу фото. Запустить приложение как службу-nssm12. картинка Запустить приложение как службу. картинка nssm12.

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

Запустить приложение как службу. nssm13. Запустить приложение как службу фото. Запустить приложение как службу-nssm13. картинка Запустить приложение как службу. картинка nssm13.

Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию 🙂

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *