Иногда нам по работе надо взять исполняемый файл и зарегистрировать его в качестве службы 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"
-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
А что вы думаете по этому поводу?