Главная

Thursday, 1 June 2017

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

Всем привет.

Иногда нам по работе надо взять исполняемый файл и зарегистрировать его в качестве службы Windows.  Ведь у службы есть ряд преимуществ перед исполняемым ЕХЕ: это и работа без login-a пользователя, и автоперезапуск в случае краха, и права запуска, прочее. Главное помнить чтобы ваше приложение не было интерактивным.

Самые известные для этого два инструмента: Sc и Powershell.

1. Применение штатной утилиты 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> и посмотрим результат.
 

Как видите, мне удалось в службу внедрить даже запуcк BAT-файла.

Изменять параметры уже созданной службы можно командой Sc config. Например, я хочу имзенить отображаемое имя службы:
Sc config MyService DisplayName= "My Second Service"

Или полностью удалить службу:
Sc delete MyService

2. С помощью 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 имеет примерно такой же функционал как и Sc.exe, разве что позволяет добавить описание.

А вот для удаления служб в PS простого способа нет, придется воспользоваться вот такой конструкцией:
(Get-WmiObject win32_service -Filter "name='MyService'").delete()


При этом служба помечается на удаление и исчезнет из списка служб только после того как перезагрузите оснастку <Services>.
 
Это все.

No comments:

Post a Comment

А что вы думаете по этому поводу?