Заметки о Windows и других программных продуктах Microsoft...

Создание службы в Windows

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

Sc.exe

Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами —  просматривать состояние, управлять (запускать, останавливать и т.п.), изменять параметры, а также создавать новые службы.

При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.

Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:

sc create [ServiceName] [binPath= ] <параметр1= > <параметр2= >

ServiceName — указывает имя, которое будет присвоено разделу службы в реестре. Имейте в виду, что это имя отличается от отображаемого имени службы (имени, которое отображается в оснастке «Services»);
binPath — указывает путь к исполняемому файлу службы.

Для примера создадим службу MyService, укажем отображаемое имя My New Service, зададим тип службы и поставим ее на авто-запуск:

Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto

Затем откроем оснастку «Services» и посмотрим результат.

оснастка Службы

 

Изменять параметры уже созданной службы можно командой Sc config. Например, мне не понравилось отображаемое имя службы и я хочу его изменить:

Sc config MyService DisplayName=″My Service″

Ну и полностью удалить службу можно вот так:

Sc delete MyService

создание, изменение и удаление службы Windows

 

PowerShell

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

New-Service -Name MyService -BinaryPathName C:\MyService\MyService.exe`
-DisplayName ″My New Service″ -Description ″Very Important Service !!!″

Изменить параметры службы можно командлетом Set-Service:

Set-Service -Name MyService -Description ″Not Very Important Service″ -StartupType Manual

создание и изменение служб с помощью PowerShell

 

В принципе PowerShell имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание. А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:

(Get-WmiObject win32_service -Filter ″name=′MyService′″).delete()

Поэтому лично я предпочитаю использовать Sc.exe.

 
Комментарии
Дмитрий

Здравствуйте! Что то uTorrent никак не получается завести… Есть какие то ограничения для приложений?

Конечно есть. Далеко не каждое приложение заведется как сервис. Как минимум приложение не должно быть интерактивным, т.е. требовать каких либо действий от пользователя. Хотя, как вариант, можно попробовать разрешить сервису взаимодействие с рабочим столом.

Сеть под доменом
и не получилось через sc.exe
есть какие-то варианты обойти проблему?
и еще, файлик службы лежит в C:\Program Files\
спасибо

Что именно не получилось ? Не удалось зарегистрировать службу или не стартует? По идее наличие домена проблемой не является, так же как и расположение файла.

доступно, популярно, работает =)

Спасибо!

Большое спасибо автору статьи. От себя только замечу, (может кому поможет) в Windows 7 сразу не покатило по двум причинам.
1. Между знаком «=» и параметром необходим пробел
2. После копирования с сайта строки «примера» кавычки «пути к файлу» превратились в какие то кракозябки из за юникода.
А в целом статья очень помогла. Чувствую себя теперь маленьким Сисадминчиком-)