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

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

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

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

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

sc create CorpCollectorService binPath= "C:toolscollector.exe -i C:toolsconfig.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= "corpusername" password= "UserPass1"

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

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

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

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

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

New-Service -Name CorpCollectorService -BinaryPathName "C:toolscollector.exe -i C:toolsconfig.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. Дело в том, что такое приложение должно быть специально разработано для работы в качестве сервиса и уметь взаимодействовать с управляющими командами 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:Toolscollector.exe"

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

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

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

nssm edit testservice

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

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