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

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

Создание службы в 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. После копирования с сайта строки «примера» кавычки «пути к файлу» превратились в какие то кракозябки из за юникода.
А в целом статья очень помогла. Чувствую себя теперь маленьким Сисадминчиком-)

PriCOOLisT

Супер! Прикрутил утилиту iperf.exe (скорость соединения между компами показывает) как системную службу на серверах. С компов юзеров проверяю скорость соединения между компом и сервером. Всё отлично пашет. Решпект и уважуха.

Win 8.1, программа RapidBoot HDD Accelerator Console. Выдает запись: «Служба отключена или удалена…» Вопрос: можно ли создать службу для данной программы

Насколько я понимаю, речь об утилите RapidBoot HDD Accelerator от Lenovo? По идее это не системная служба, а скорее драйвер, поэтому смысла регистрировать ее вручную как службу нет.

Создал службу, не запускает «Ошибка 1053», как решить?

Ошибка 1053, насколько я помню, означает лишь то, что служба не смогла запуститься в отведенное время. Для уточнения проблемы стоит заглянуть в логи.

Как это может работать? Вы пробовали копировать примеры? Вы украли у меня несколько часов времени.
Ваш пример
Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto
то что работает
Sc create MyService binPath= C:\MyService\MyService.exe DisplayName= ″My New Service″ type= own start= auto
есьт разница?

Разница в кавычках, иногда они некорректно обрабатываются. А вообще не стоит бездумно копировать команды.

Алексей

Извините, но Вы в первый раз статью пишете?
Если считаете, что это нормально, тогда это не Статья, а нечто другое.

Удивительная ненаблюдательность — разница в пробелах — а это ключевой момент start=auto или start= auto
>> А вообще не стоит бездумно копировать команды — подобное оправдание выдает в Вас нехорошего человека

В моих статьях вполне могут встречаться ошибки\опечатки\неточности, и если вы их найдете и сообщите об этом — я скажу вам спасибо и исправлю их. А играть в «найди 10 отличий» мне честное слово некогда.

Алексей

Извините, но Вы в первый раз статью пишете?
Если считаете, что это нормально, тогда это не Статья, а нечто другое.

Не могу запустить службу политики диагностики выбивает ошибку 5 отказано в доступе.. много читал на форумах как исправить но ничего не получается . Можете подробно рассказать как исправить эту ошибку?

Для начала надо открыть Event Viewer и посмотреть системные логи, в них должна быть более подробная информация о причине ошибки.

У кого не получается с SC на сервере 2012 и выше!!!
Используйте команду для PowerShell

Андрей

Ну положим наличие пробела после знака = неролевантно — лично у меня работают оба варианта. А ошибка 5 означает всего лишь, что CMD нужно было запускать с правами админа, а не бездумно под юзером.

Игорь

Спасибо в cmd под админом все прекрасно создалось.

Ни как не пойму как задать параметры запуска Sc.exe
В консоли прописываю так:
Sc create MyService binPath=C:\MyService\MyService.exe DisplayName=″My New Service″ type=own start=auto
но что надо прописать в команде чтобы это попало в параметры запуска службы?
Спасибо.

В комментариях два раза указали на «проблему» с пробелами. Может стоит поправить, не?

Так поправил давно. Нет там уже пробелов)

Добрый день. Создал службу по вашему гайду, автоматически не стартует. При попытке запустить вручную получаю ошибку 1053, служба не ответила на запрос своевременно. Что могло пойти не так?

Ничего не робит) пробовал по всякому — ругается что после = должен быть пробел, но он стоит. В общем автору надо или использовать на сайте примеры переносимые в первозданном виде или не приводить примеры, а только описывать какие использовать команды… Просто помощи от такой «помощи» — только вред…

Leave a Reply to Niki