Важной частью операционных систем Windows являются службы Windows – Windows Service. Службы – это приложения, которые запускаются вместе с операционной системой и выполняются на фоне вне зависимости от пользователя или статуса входа в систему. Создание службы возможно и пользователями.
Главными инструментами для выполнения этих задач могут являться: командная строка Windows, Microsoft Powershell или же утилиты INSTSRV.EXE и SRVANY.EXE
Содержание
sc create – командная строка и создание службы
Командная строка, запущенная в режиме администратора, позволяет создать свою службу с помощью утилиты sc.exe (service control). Ниже приведён наиболее распространённый формат команды консоли Windows, позволяющий использовать утилиту для создания службы:
sc create название binPath= ”путь” DisplayName= ”отображаемоеимя” type= тип start= режим запуска
Пробел после “=” необходим для корректного завершения операции. Обязательными параметрами для создания службы являются только название, binPath и DisplayName.
Разберём указанную команду. Название– это внутреннее название службы. binPath должен быть приравнен к исполняемому файлу, на котором базируется работа службы. DisplayName – это имя, отображающееся в списке служб.
type= тип непосредственно обозначает тип создаваемой службы. Существуют следующие допустимые значения данного параметра:
- own – определяет службу, которая занимает собственный индивидуальный процесс. Стандартное значение параметра;
- share – определяет службу, которая запускается в совместном процессе и делит исполняемый файл с другими службами;
- kernel – определяет драйверы (например, устройств);
- filesys – определяет драйвер файловой системы;
- rec – определяет драйвер распознания файловой системы;
- interact – устаревший тип, позволяющий создавать «интерактивные» службы – то есть такие, которые допускают взаимодействие с пользователем, ввод с его стороны и т.д. Такие службы должны иметь два типа одновременно – interact и own/share. Например, в команде нужно будет написать type= own type= interact.
Start= режим_запуска отвечает за то, когда запускается работа службы. Среди режимов запуска:
- boot – предназначен для драйверов устройств, загружающихся загрузчиком ОС;
- system – предназначен для драйверов устройств, которые запускаются вместе с ядром ОС;
- auto – служба самостоятельно загружается при каждой включении компьютера и запускается даже если никто не заходит в систему;
- demand – служба запускается вручную. Стандартное значение параметра;
- delayed-auto – служба запускается только после запуска остальных служб
Существуют и более опциональные параметры для создания служб, такие как error, group, depend, password и другие. Их описание следует искать в официальной документации Microsoft.
После успешного использования команды, в консоли выведется надпись об успешном создании службы, и если она должна быть запущенной, то она появится в списке служб (в окне команды «выполнить» ввести services.msc)
Как удалить
Удаление созданной службы происходит в одну команду
sc delete servicename
где servicename – название службы, заданное вами после ключевых слов sc create.
Использование PowerShell
Сильный инструмент для выполнения поставленной задачи предоставляет и Microsoft PowerShell в режиме администратора. В данном случае главной командой представляется New-Service. В минимальной форме она также требует лишь название сервиса и путь к исполняемому файлу. Более подробная версия команды рассматривается ниже.
New-Service -Name название —BinaryPathName “путь” —DisplayName “отображаемоеимя” —Description “описание” —StartupType “режим”
BinaryPathName – аналог binPath в sc create, DisplayName аналогично соответствующему параметру, Description добавляет службе описание в списке служб. StartupType близок по смыслу к start: параметр auto переименован в Automatic (здесь Automatic выставлен по умолчанию), delayed-auto – в AutomaticDelayedStart, demand – в manual. Добавлено значение disabled для полностью отключённых служб, невозможных к запуску.
Удаление средствами PowerShell
В противовес команде New-Service для создания службы, можно использовать команду Remove-Service для её удаления. Remove-Service -Name servicename, где servicename – имя службы.
Как сделать любой исполняемый файл службой
Не каждый исполняемый exe-файл может выполнять роль службы ОС Windows. Настоящие службы особым образом взаимодействуют с операционной системой, отвечая на её специфичные запросы. Отсутствие ответов на эти запросы заставляет Windows думать, что служба работает некорректно. В прошлом существовали специальные программы, позволявшие использовать любой файл как службу.
В настоящий момент существует два основных решения данной проблемы. Так, многие люди используют функционал программы «Планировщик задач», поставляющейся в составе ОС Windows начиная с версии XP. Она не позволяет создать полноценные службы, но позволяет настроить срабатывание программы в определённые моменты работы системы. В случае же, если необходимо использование особенностей именно служб, используются утилиты родом из Windows Server 2003 Resource Kit Tools – INSTSRV.EXE и SRVANY.EXE в сочетании с редактором реестра.
Для работы с ними, необходимо скачать инструментарий упомянутого программного пакета и переместить данные файлы в папку Windows на системном диске. Далее, в командной строке с правами администратора используется команда следующего вида:
Путь_к_instsrv.exe названиесервиса путь_к_srvany.exe
Затем, в редакторе реестра в разделе HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/ необходимо выбрать созданное приложение. После нажатия ПКМ создаём раздел с именем «Parameters», нажимаем ПКМ по получившемуся разделу и добавляем строковый параметр Application, значением которого является путь до exe-шника, который необходимо использовать в качестве службы.
Создание сервиса таким образом требует расширения стандартных возможностей ОС Windows и является более замороченной, поэтому для более тривиальных случаев фонового использования программ стоит присмотреться к функционалу планировщика задач.