Как запустить приложение в виде службы 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.
Создание службы
Для создания службы с именем notepad запускаем командную консоль, переходим в папку с распакованным NSSM (для 64-разрядной Windows) и вводим команду nssm install notepad , которая открывает окно графического инсталлятора NSSM. Чтобы создать службу, достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Дополнительно в поле Options можно указать ключи, необходимые для запуска службы.
Также на этапе создания новой службы можно указать некоторые дополнительные параметры.
На вкладке «Shutdown» перечислены методы остановки и таймауты, используемые при штатном завершении работы или аварийной остановке приложения. Когда NSSM получает команду остановки (напр. при завершении работы приложения), то он пытается остановить контролируемое приложение штатным образом. Если же приложение не отвечает, то NSSM может принудительно завершить все процессы и подпроцессы этого приложения.
Всего есть четыре этапа завершения работы приложения, и по умолчанию они будет использоваться в таком порядке:
• На первом этапе NSSM пытается сгенерировать и отправить событие Ctrl+C. Этот способ хорошо работает для консольных приложений или скриптов, но не применим для графических приложений;
• Затем NSSM определяет все окна, созданные приложением, и посылает им сообщение WM_CLOSE, инициирующее выход из приложения;
• Третьим этапом NSSM вычисляет все потоки, созданные приложением, и отправляет им сообщение WM_QUIT, которое будет получено если приложение имеет очередь сообщений потока;
• И в качестве последнего средства NSSM может вызвать метод TerminateProcess(), принудительно завершив работу приложения.
Возможно отключить некоторые или даже все методы, однако для разных приложений срабатывают разные методы и для корректного завершения работы приложения рекомендуется оставить все как есть.
По умолчанию при падении службы NSSM пытается рестартовать ее. На вкладке «Exit actions» можно изменить автоматическое действие при нештатном завершении работы приложения, а также выставить задержку перед автоматическим перезапуском приложения.
На вкладке «Input/Output (I/O)» можно задать перенаправление ввода\вывода приложения в указанный файл.
На вкладке «Environment» можно задать для службы новые переменные окружения, или переопределить существующие.
Также можно не пользоваться графической оболочкой и сразу создать службу в консоли такой командой:
nssm install notepad ″C:\Windows\system32\notepad.exe″
Управление службой
После создания службы с помощью NSSM зайдем в оснастку Services и найдем службу notepad. Как видите, с виду она ничем не отличается от остальных служб, мы также можем ее запустить, остановить или изменить режим запуска. Однако обратите внимание, что в качестве исполняемого файла указан nssm.exe.
А если зайти в Task Manager, то мы увидим следующую картину: в качестве основного (родительского) процесса запущен NSSM, служба notepad запущена как его дочерний процесс, и уже в этом дочернем процессе запущено приложение Блокнот.
Удаление службы
Для удаления службы вводим команду nssm remove notepad и подтверждаем ее удаление. А введя команду nssm remove notepad confirm , можно обойтись и без подтверждения.
Запуск службы в интерактивном режиме
Основное отличие пользовательского приложения от службы заключается в том, что после запуска приложение может требовать для продолжения работы дополнительных действий со стороны пользователя — например нажать кнопку или ввести команду. Для этого необходимо получить к нему доступ, что как оказывается, не так-то просто сделать.
Для того, чтобы запустить службу в интерактивном режиме, надо в оснастке Службы открыть ее свойства и на вкладке «Вход в систему» отметить чекбокс «Разрешить взаимодействие с рабочим столом».
А дальше начинаются чудеса 🙂 Cлужба, запущенная в интерактивном режиме, открывается в изолированном сеансе (session 0). Попасть в этот сеанс можно только при помощи Службы обнаружения интерактивных служб (ui0detect), которая отслеживает запуск интерактивных служб на компьютере и выдает оповещение. В Windows 7\Server 2008 эта служба активна по умолчанию, а в Windows 8\Server 2012 она отключена и не отображается в графической оснастке Службы (по крайней мере я ее там не нашел). Более того, если вы все же найдете эту таинственную службу и попробуете ее запустить, то получите сообщение об ошибке.
А дело в том, что для ее запуска необходимо разрешить запуск интерактивных служб на компьютере. Поэтому открываем редактор реестра, находим в разделе HKLM\System\CurrentControlSet\Control\Windows параметр типа DWORD с именем NoInteractiveServices и ставим его значение в 0.
После чего открываем консоль PowerShell и стартуем службу обнаружения командой:
Start-Service -Name ui0detect
Убедившись что служба обнаружения запущена, рестартуем службу notepad, и получаем вот такое окошко. Выбираем пункт «Посмотреть сообщение»
и попадаем в нулевой сеанс, в котором работает наше приложение. Дальше производим с ним необходимые действия и возвращаемся обратно.
Такое вот интересное решение для запуска приложений в виде служб Windows. Не самое красивое, но вполне соответствующее своему названию 🙂
Запуск приложения как службы Windows
Для начала скажу, что я зарабатываю через вот этого брокера , проверен он временем! А вот хороший пример заработка , человек зарабатывает через интернет МНОГО МНОГО МНОГО и показывает все на примерах, переходи и читай! Добавь страницу в закладки. А теперь читаете информацию ниже и пишите свой отзыв
Если нам необходимо запустить обыкновенное приложение в качестве службы Windows, то у нас есть как минимум два способа это сделать. Во первых есть утилиты Srvany & Instsrv из Resouce Kit, в во вторых есть очень интересное приложение под названием Non-Sucking Service Manager, которая является свободным программным обеспечением с открытым кодом может работать в операционных системах Microsoft, начиная с Windows 2000 и заканчивая Windows 8. При этом NSSM не требует установки, а взять ее можно на официальном сайте nssm.cc. Рассмотрим чуть подробнее оба способа запуска приложения в качестве службы Windows.
Способ первый – Srvany & Instsrv.
Для начала стоит убедится, что вы работаете под учетной записью администратора, в этом случае у вас не только достаточно прав для любых действий, но и созданная под этим аккаунтом служба будет продолжать работать под остальными учетными записями. Далее, копируем файлы instsrv.exe и srvany.exe в папку system32. Запyскам из командной стpоки следующую команду:
instsrv MyService c:полный_пyтьsrvany.exe (здесь MyService это указанное вами имя вновь созданной службы). Теперь, для конфигурирования службы, идем в «Панель управления», затем в раздел «Администрирование» и затем в раздел «Службы», здесь мы находим свой созданный сеpвис и щёлкаем на нём 2 pаза левой кнопкой мыши.
В появившемся окне свойств отмечаем, каким способом наша служба бyдет запyскаться: Automatic – бyдет запyскаться автоматически пpи загpyзке Windows, Manual – бyдет запyскаться только, когда вы ее запустите вpyчнyю, Disabled – не бyдет запyскаться вообще. Если нужно, чтобы запущенная служба взаимодействовала с вашим рабочим столом, то отметьте чек-бокс «Allow Service to Interact with Desktop». Теперь мы запускаем редактор реестра в ветке:
HKLM SYSTEM CurrentControlSet Service Имя_Вашей_службы
создаёте ключ с названием «Parameters» (без кавычек) и задаете для него значение «Application» (без кавычек) типа REG_SZ в котором указываете полный пyть к исполняемомy файлy, который стартует как служба. Осталось перезагрузить компьютер или запустить службу вручную.
Способ второй – Non-Sucking Service Manager.
Открываем командную строку (конечно, с правами администратора) и переходим в папку, в которую мы предварительно распаковали NSSM. Здесь мы вводим команду
nssm install наша_служба
в результате выполнения команды откроется окно инсталлятора NSSM. Для того, чтобы создать службу, нам достаточно в поле Path указать путь к исполняемому файлу и нажать кнопку «Install service». Кроме того, в поле Options мы можем указать ключи, если они необходимы для запуска службы.
Теперь перейдем к настройке некоторых дополнительных параметров. На вкладке «Shutdown» перечислены методы остановки, которые используются при штатном завершении работы службы или аварийной остановке приложения. Стоит оставить все галочки, поскольку для разных приложений срабатывают разные методы.
Далее, при настройках по умолчанию в случае падения службы, NSSM пытается снова запускать ее, но на вкладке «Exit actions» можно указать, какое действие будет выполняться в случае нештатного завершения работы приложения и выставить задержку перед автоматическим перезапуском приложения. На вкладке «Environment» мы можем задать для службы новые переменные окружения, или же переопределить существующие.
На тот случай, если мы хотим не пользоваться графической оболочкой, можно сразу создать службу из командной строки командой:
nssm install notepad ?полный_путь_к_исполнаемому_файлусам_файл.exe?
Для удаления службы вводим команду:
nssm remove наша_служба
и подтверждаем ее удаление, если ввести команду:
nssm remove notepad confirm
то и подтверждение запрашиваться не будет.
Вот такие достаточно простые способы запуска приложения в качестве службы Windows, теперь, когда ваше приложение стартует автоматически как служба.
(Пока оценок нет)
Запуск программы как сервис
FireDaemon — позволяет запускать любое Win32 приложение или скрипт (например: BAT/CMD, Perl, Java, Python, TCL/TK) как Windows сервис . Легко настраивается через GUI или XML, потребляет мало системной памяти и процессорного времени, управляет приоритетом подпроцессов, настройками окружения, назначение использования одного или нескольких CPU, а так же собирает статистику событий и записывает в log файлы на диск.
Не часто но порой приходится ей пользоваться, т.к. ручками долго и нудно прописывать самому
Один из самых часто встречающихся вопросов, связанных с windows xp — это вопрос о возможности запуска программ как сервиса, что дает определенные преимущества.
Сделать это не так трудно, как считается, для этого необходимо скачать определенный пакет утилит, называемый srvany. пакет состоит из двух утилит instsrv.exe и srvany.exe.
Для начала необходимо скопировать эти файлы в системную директорию %windir%/system32. Затем необходимо запустить файл srvany.exe из командной строки, используя следующий синтаксис: «instsrv servicename %windir%srvany.exe», Где servicename — придуманное имя сервиса. Если всё сделано правильно, то появится сообщение, подтверждающее успешное создание сервиса (the service was successfuly added).
Теперь зайдите в Администрирование — Службы (services). Находите только что созданную службу, двойной клик вызывает свойства сервиса. На первой вкладке можно выбрать параметры запуска — automatic (автоматически при загрузке компьютера), manual (Вручную) и disabled (отключено). Для работы созданного сервиса в отдельном окне необходимо отметить на второй вкладке (Вход в систему) пункт allow service to interact with desktop (Разрешить взаимодействие с рабочим столом). Пока всё.
Следующим шагом является редактирование реестра. Запускаем редактор реестра regedit. (Если не знаете, как прочитайте здесь). Шагаем к ветви hkey_local_machinesystemcurrentcontrolsetservices и находим имя сервиса здесь. Создаем раздел «paremeters» (без кавычек) и в этом разделе прописываем путь к программе, которую мы хотим запустить, следующим образом: Строковой параметр: «application» значение — путь к программе (c: file.exe). ВСЁ. Ниже представлен отрывок из экспортированного файла моего сервиса (apox), который автоматически запускает одну из серий Масяни.
[hkey_local_machinesystemcurrentcontrolsetservicesapox]
«type»=dword:00000110
«start»=dword:00000004
«errorcontrol»=dword:00000001
«imagepath»=hex(2):63,00,3a,00,5c,00,77,00,69,00,6e,00,64,00,6f,00,77,00,73,00,
5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,72,00,76,
00,61,00,6e,00,79,00,2e,00,65,00,78,00,65,00,00,00
«displayname»=»apox»
«objectname»=»localsystem»
Запустить сервис, если он не отключен, можно несколькими способами, во-первых через командную строку: net start servicename — где sеrvicename — имя Вашего сервиса. И другим способом — непосредственно через апплет административной панели — службы.
Хорошо, сервис установлен, запущен, а как же его удалить ведь стандартным delete не обойдешься. Сначала сервис необходимо остановить: net stop servicename, затем опять же в коммандной строке выполняем команду instsrv myservice remove.
1″ :pagination=»pagination» :callback=»loadData» :options=»paginationOptions»>