Создать (установить) новую службу в Windows

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

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

Следующая команда создаст службу из указанного исполняемого файла с дополнительными опциями запуска:

sc create CorpCollectorService binPath= "C:\tools\collector.exe -i C:\tools\config.xml" start= auto DisplayName= "CORP Log Collector Service"

sc.exe create создать службу в windows

В случае успешного выполнения команды, появится сообщение:

[SC] CreateService SUCCESS

Используются следующие параметры:

  • CorpCollectorService – имя службы
  • binPath – содержит полный путь к исполняемому файлу и необходимые аргументы запуска (в кавычках, если содержит пробелы).
  • start= auto – автоматически запускать службу при загрузке компьютера (boot|system|auto|demand|disabled).
  • DisplayName — описательное имя службы

Можно использовать дополнительные параметры:

  • type — тип службы. По умолчанию используется own (служба работает в собственно процессе). Можно указать own|share|kernel|filesys|adapt|rec|interact
  • По умолчанию служба запускается от имени Local System. Если нужно запустить службу от имени определенного пользователя, нужно указать его имя и пароль с помощью параметров obj= "corp\username" password= "UserPass1"

Теперь вы можете открыть графическую оснастку управления службами services.msc . Новая служба появится в списке сервисов (нажмите F5, чтобы перечитать базу данных диспетчера служб), и вы можете запустить службу или изменить тип запуска.

консоль управления службами

Все настройки службы хранятся в ветке реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ . Для новой службы был автоматически создан раздел CorpCollectorService.

Настройки службы в реестре

Аналогичная команда PowerShell для создания службы:

New-Service -Name CorpCollectorService -BinaryPathName "C:\tools\collector.exe -i C:\tools\config.xml" -DisplayName "my test service" -Description "CORP Log Collector Service" -StartupType "Automatic"

New-Service - создать службу из powershell

Если нужно задать имя пользователя и пароль для запуска службы, используйте такой синтаксис:

$username = "admin1"
$password = "password1"
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential ($username, $securepassword)
New-Service … -Credential $cred

Чтобы корректно удалить службу в Windows, используйте команду:

sc delete имя_службы

Нужно отметить, что произвольный исполняемый файл вряд-ли получится запустить в качестве службы Windows. Дело в том, что такое приложение должно быть специально разработано для работы в качестве сервиса и уметь взаимодействовать с управляющими командами Service Control Manager (SCM).

Если приложение не умеет обрабатывать управляющие сигналы SCM, при попытке запустить такую службы появится ошибка 1053:

Windows could not start the MyService1 service on Local Computer.
Error 1053: The service did not respond to the start or control request in a timely fashion.

Ошибка Error 1053: The service did not respond to the start or control request in a timely fashion.
Для запуска произвольного приложения (которое изначально не предназначено для работы в качестве службы, в том числе приложений с графическим интерфейсом) в виде сервиса Windows можно использовать дополнительные сторонние утилиты. В Windows Server Resource 2003 были доступны утилиты srvany.exe и instsrv.exe , которые можно использовать для создания службы из произвольного файла. Однако предпочтительнее использовать более современную утилиту NSSM (Non-Sucking Service Manager), которая в отличии от старых классических утилит Microsoft умеет контролировать состояние запущенного процесса приложения и работать как верхнеуровневый обработчик над процессами.

Установить NSSM можно с помощью пакетного менеджера winget:

winget install --id NSSM.NSSM -e

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

nssm install testservice "C:\Tools\collector.exe"

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

создать службу в windows из произвольного приложения с помощью nssm

У NSSM есть простенький графический интерфейс для настройки параметров службы. Например, чтобы отредактировать созданную ранее службу, выполните:

nssm edit testservice

параметры службы nssm

Ранее мы показывали как с помощью NSSM запустить PowerShell скрипт в качестве системной службы.

Предыдущая статья Следующая статья


Комментариев: 0 Оставить комментарий

Оставить комментарий

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

Я не робот( Обязательно отметьте)