- Запуск приложения как службы Windows
- Как открыть службы Windows
- Способ 1
- Способ 2
- Способ 3
- Как установить программу в качестве службы
- Установка программы в качестве службы
- Удаление службы
- Запуск программы как сервис
- Пилим свою службу Windows – руководство для «не настоящих программистов»
- Зачем нужна служба, если есть назначенные задания
- Способ первый. От Microsoft
- Способ второй, почти взрослый
- Способ третий. AutoIT
Запуск приложения как службы Windows
Службы Windows — запущенные в фоне приложения, которые работают независимо от пользователя компьютера, и управляются непосредственно самой операционной системой. По умолчанию, службами являются строго определенные приложения, однако, ничто не мешает пользователю создать их самому. Выполнить данную задачу можно несколькими способами — с использованием стандартных средств Windows, либо с использованием сторонней программы NSSM.
Входящая в Windows программа SC позволяет легко создавать службы Windows, а так же проводить другие различные с ними манипуляции — удаление, отключение, включение, и т. д. Создается служба достаточно просто, для этого достаточно запустить командную строку от имени администратора, и выполнить там следующую команду:
Удаляется же служба еще проще:
Однако, у данного метода есть один большой существенный недостаток — с помощью данной утилиты создать службу можно только из программы, которая поддерживает работу службой. По этому, запустить какое попало приложение как службу данным способом не получится — но, можно воспользоваться сторонней утилитой NSSM, о которой речь пойдет ниже.
NSSM — программа, предназначенная для создания служб из исполняемых файлов Windows, в том числе и из графических утилит, что ставит её на уровень выше средств от Microsoft. С её помощью можно запускать большинство приложений, даже которые рассчитаны на взаимодействие с пользователем.
Скачать данную программу можно с её официального сайта — nssm.cc.
На случай проблем с официальным сайтом, можно скачать программу с нашего сайта.
В архиве для скачивания можно найти версию для 64-битной версии Windows (папка win64), для 32-битной (папка win32) и исходные коды приложения (папка src). Выбираем нужное приложение под разрядность своей системы, копируем его в удобное для вас место на жестком диске. Никакая установка приложения не требуется.
- Предположим, нужно создать службу для веб-сервера nginx под Windows. Для этого, запускаем командную строку с правами администратора, и переходим в директорию с распакованным исполняемым файлом nssm.exe.
- Затем выполняем команду, начинающую установку службы:
- Откроется окно с настройками создаваемой службы.
На самой первой вкладке «Application«, в строке «Path» задается путь к исполняемому файлу, «Startup Directory» — рабочая директория, а «Arguments» — параметры запуска. В самом низу расположена строка «Service Name«, где задается имя создаваемого сервиса.
На вкладке «Details» можно задать имя, под которым будет отображаться создаваемая служба в списке служб, а так же описание службы, которое будет отображаться там же. В выпадающем списке «Startup Type» можно выбрать тип запуска службы.
Вкладка «Log on» позволяет указать пользователя, под которым будет запускаться служба.Заполним все нужные поля и выбрав нужные настройки, остается только нажать кнопку «Install service«, для установки службы. - После нажатия кнопки «Install service«, служба будет создана, но при этом запустить её нужно будет вручную (либо перезагрузить компьютер, чтобы служба с параметром запуска «Auto» запустилась при его запуске).
Так же удалить службу можно с помощью команды в командной строке:
Как открыть службы Windows
Способ 1
Кликните правой кнопкой мыши по Пуск и выберите Выполнить:
В открывшемся окне введите команду services.msc и нажмите OK.
Откроется оснастка «Службы».
Способ 2
Откройте панель управления: в Windows 10 или 8 правой кнопкой мыши по Пуск — Панель управления. В Windows 7: левой кнопкой по Пуск — Панель управления.
В открывшемся окне в правой верхней части найдите строку поиска и введите Службы.
Среди результатов в разделе Администрирование кликните по Просмотр локальных служб.
Способ 3
Воспользуйтесь поиском Windows.
В 10-ке кликните по значку поиска на нижней панели и введите Службы.
Среди результатов в самом верху появится нужный пункт.
В Windows 7 процесс аналогичен, за исключением того, что строка поиска находится в нижней части меню Пуск.
Как установить программу в качестве службы
Наверняка, многие сталкивались с ситуацией, когда есть необходимость запускать программу до входа пользователя в систему, но в установщике программы нет опции «Установить в качестве службы».
Установка программы в качестве службы
Первые 4 пункта понадобятся лишь в windows 8.1
1 Вызовите боковую панель Windows 8.1. Для этого можно использовать комбинацию клавиш WIN+C.
2 Выберите Поиск:
3 В поле поиска введите командная строка. В списке появится позиция Командная строка с системной иконкой.
Нажмите по ней правой кнопкой мыши:
4 Выберите Запуск от имени администратора:
5 Нажмите Да:
6 В командной строке введите путь к программе, которую вы хотите установить в качестве службы, с ключом /installservice и нажать ENTER. Путь необходимо взять в кавычки.
После нажатия на ENTER ответьте «Да» на запрос службы контроля учётных записей:
7 Если программа запросит учётные данные для запуска, как в нашем примере, введите реквизиты учётной записи администратора и нажмите ОК:
Далее, программа, которую вы установили в качестве службы, сообщит вам об успешной установке службы.
У каждой программы это окно будет разным
Зайдите в службы (Выполнить — services.mcs — ENTER) и проверьте, что в списке присутствует только что установленная служба:
Удаление службы
Процедура удаления службы схожа с установкой. Отличие лишь в том, что после пути к программе нужно указать ключ /uninstallservice.
Запуск программы как сервис
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»>
Пилим свою службу Windows – руководство для «не настоящих программистов»
Однажды вы задумаетесь, как превратить скрипт или приложение в Windows-службу. Скорее всего, задача окажется не такой уж тривиальной – приложению как минимум потребуется специальный интерфейс для получения команд от системы. А раз есть требования и ограничения, то есть и скрипты, и милые сердцу костылики для преодоления.
Статья будет полезна тем, кто, как и я — «программист не настоящий».
Зачем нужна служба, если есть назначенные задания
В отличие от назначенных заданий служба работает постоянно, запускается при старте ПК и может управляться средствами Windows. А еще регулярно запускаемому скрипту могут понадобиться данные с предыдущего запуска, и может быть полезно получение данных из внешних источников — например, в случае TCP или Web сервера.
Лично мне за последние пять лет приходилось создавать службу три с половиной раза:
- Потребовалось создать сервис на fail2ban для Windows 2003., который работал с логами FileZilla и Apache, а при подозрении на брутфорс блокировал IP штатными средствами Windows — ipsec.
- Аналог телнет-сервера для домашних версий Windows. Понадобилось выполнять команды на удаленных рабочих станциях, которые были под управлением Windows 7 Home. По сути, вторая попытка поиграть в службы.
- Музыкальный проигрыватель для торгового зала под Windows. Задачу по ТЗ можно было решить при помощи mpd и пачки скриптов, но я решил — если уж делать скрипты, то почему бы и не «сваять» проигрыватель самому. За основу взял библиотеку BASS.dll.
- Когда выбирали веб-сервер с поддержкой загрузки файлов под Windows, одним из вариантов был HFS. Сам по себе работать он не может, поэтому пришлось «запихивать» его в службу. В результате решение не понравилось, и просто установили «тему» Apaxy на web-сервере Apache.
Для создания службы можно использовать взрослые языки программирования вроде 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 он будет выглядеть так:
Настроенная служба.
Можно запустить и радоваться.
Работающая служба.
Однако у этого способа есть недостатки:
- Утилиты старые, разработаны до изобретения PowerShell, UAC и прочих вещей.
- Srvany не контролирует работу приложения. Даже если оно выпадет в ошибку, служба продолжит свое дело как ни в чем не бывало.
- Придется донастраивать и копаться в реестре. Вы же помните, что копаться в реестре небезопасно?
Поэтому перейдем к методу, частично лишенному этих проблем.
Способ второй, почти взрослый
Существует утилита под названием NSSM — Non-Sucking Service Manager, что можно перевести как не-плохой менеджер служб. В отличие от предыдущей, она поддерживается разработчиком, и исходный код опубликован на сайте. Помимо обычного способа, доступна и установка через пакетный менеджер Chocolately.
Создать сервис можно из обычной командной строки, вооружившись документацией на сайте разработчика. Но мы воспользуемся PowerShell. Потому что можем, разумеется.
Установка через PowerShell.
Для разнообразия проверим работу службы не браузером, а тоже через PowerShell командой Invoke-RestMethod.
И вправду работает.
В отличие от srvany, этот метод позволяет перезапускать приложение на старте, перенаправлять stdin и stdout и многое другое. В частности, если не хочется писать команды в командную строку, то достаточно запустить GUI и ввести необходимые параметры через удобный интерфейс.
GUI запускается командой:
Настроить можно даже приоритет и использование ядер процессора.
Действительно, возможностей куда больше, чем у srvany и ряда других аналогов. Из минусов бросается в глаза недостаточный контроль над всем процессом.
Налицо нехватка «жести». Поэтому я перейду к самому хардкорному методу из всех опробованных.
Способ третий. AutoIT
Поскольку я давний любитель этого скриптового языка, то не смог пройти мимо библиотеки под названием _Services_UDF v4. Она снабжена богатой документацией и примерами, поэтому под спойлером сразу приведу полный текст получившегося скрипта.
Итак, попробуем «завернуть» в нее наш веб-сервис:
Разберу подробнее момент запуска приложения. Он начинается после операции $bServiceRunning = True и превращается в, казалось бы, бесконечный цикл. На самом деле этот процесс прервется, как только служба получит сигнал о завершении — будь то выход из системы или остановка вручную.
Поскольку программа для скрипта является внешней (powershell.exe), то после выхода из цикла нам нужно закончить ее работу с помощью ProcessClose.
Для этого скрипт необходимо скомпилировать в .exe, а затем установить службу, запустив exe с ключом -i.
Оно работает!
Разумеется, этот способ не самый удобный, и все дополнительные возможности придется реализовывать самостоятельно, будь то повторный запуск приложения при сбое или ротация логов. Но зато он дает полный контроль над происходящим. Да и сделать в итоге можно куда больше — от уведомления в Telegram о сбое службы до IPC-взаимодействия с другими программами. И вдобавок — на скриптовом языке, без установки и изучения Visual Studio.
Расскажите, а вам приходилось превращать скрипты и приложения в службы?