Как создаются службы в Windows
Иногда требуется исполняемый файл зарегистрировать в качестве службы Windows. Имеется пара способов это сделать:
Для создания и службы из командной строки можно использовать программу SC (Sc.exe). SC представляет из себя утилиту командной строки, которая реализует вызовы ко всем функциям интерфейса прикладного программирования (API) управления службами Windows. С ее помощью можно производить любые действия со службами — просматривать состояние, управлять (запускать и останавливать), изменять параметры, а также создавать новые службы.
При создании службы с помощью SC нет необходимости вручную создавать записи в реестре и затем перезагружать компьютер, чтобы обеспечить обновление базы данных диспетчером служб. Также SC позволяет указать имя удаленного компьютера, что дает возможность управлять службами как на локальном, так и на удаленном компьютере.
Для создания нового сервиса запускаем команду Sc create. Она создает запись службы в реестре и в базе данных диспетчера служб. Sc create имеет следующий синтаксис:
sc create [ServiceName] [binPath= ]
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 10
Бывает, что имеется некий исполняемый файл, который необходимо зарегистрировать в системе как службу Windows 10. Существует множество различных способов, которые позволяют это сделать. Сейчас мы рассмотрим два основных и проверенных метода создания службы Windows.
Создание службы с помощью программы Sc.exe
Первый способ позволяет создавать службы, используя утилиты, работающие через командную строку. В данном случае, используется инструмент sc.exe. Он позволяет взаимодействовать с функциями API и выполнять операции со службами Windows 10. Несмотря на то, что данная программа даже не обладает графическим интерфейсом, она является мощным инструментом и может контролировать состояние служб, создавать, редактировать и управлять ими.
Если создавать службу, с помощью sc.exe, то не возникает необходимости в изменении параметров реестра и списка служб в диспетчере. Кроме того, утилита способна работать со службами на локальном компьютере, и выполнять те же действия на удаленных машинах.
Чтобы создать новый сервис, откройте командную строку от имени администратора и запустите команду «Sc create». Она запишет новую службу к базе диспетчера служб. Синтаксис команды представлен следующим образом:
- ServiceName — данным параметром определяется имя раздела службы в реестре;
Данное имя не совпадает с тем именем, которое будет отображаться диспетчере (например, в Services). - BinPath — в этом параметре записываем путь, где хранится исполняемый файл.
Чтобы было понятнее, в качестве примера, мы создадим службу «MySevice». При этом, отображаемое имя будет «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″
А еще можно избавиться от службы полным ее удалением. Для этого используйте такую команду:
С помощью утилиты PowerShell
Ну а с помощью такого мощного инструмента, как PowerShell можно хоть горы двигать. Он обладает большими возможностями и способен работать с различными службами. Здесь, для добавления новой службы, существует специальная команда «New -Service». Давайте попробуем новую службу, как и в прошлом примере, будем использовать те же имена и значения, только добавим дополнительный параметр, в виде описания. И так, команда, для создания нового сервиса, выглядит следующим образом:
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. Но есть один маленький минус — здесь нет простой команды для удаления службы. Поэтому приходиться использовать такой вот, немного мудреный, код:
(Get-WmiObject win32_service -Filter ″name=′MyService′″).delete()
Практическое руководство. Создание служб Windows How to: Create Windows Services
При создании службы можно использовать шаблон проекта Visual Studio, который называется Служба Windows. When you create a service, you can use a Visual Studio project template called Windows Service. Этот шаблон автоматически выполняет основную часть работы, ссылаясь на необходимые классы и пространства имен, устанавливая наследование от базового класса для служб и переопределяя некоторые методы, которые вы обычно хотите переопределять. This template automatically does much of the work for you by referencing the appropriate classes and namespaces, setting up the inheritance from the base class for services, and overriding several of the methods you’re likely to want to override.
Шаблон проекта «Службы Windows» в экспресс-выпуске Visual Studio отсутствует. The Windows Services project template is not available in the Express edition of Visual Studio.
Для создания функциональной службы необходимо выполнить, как минимум, следующее: At a minimum, to create a functional service you must:
Задайте свойство ServiceName. Set the ServiceName property.
Создайте установщики, необходимые для приложения службы. Create the necessary installers for your service application.
Переопределите и задайте код для методов OnStart и OnStop для настройки режимов поведения службы. Override and specify code for the OnStart and OnStop methods to customize the ways in which your service behaves.
Создание приложения службы Windows To create a Windows Service application
Создайте проект Служба Windows. Create a Windows Service project.
Инструкции по созданию службы без использования шаблона см. в разделе Практический пример. Создание служб программным способом. For instructions on writing a service without using the template, see How to: Write Services Programmatically.
В окне Свойства задайте для своей службы свойство ServiceName. In the Properties window, set the ServiceName property for your service.
Значение ServiceName свойства всегда должно соответствовать имени, указанному в классах установщика. The value of the ServiceName property must always match the name recorded in the installer classes. При изменении этого свойства необходимо также обновить свойство ServiceName классов установщика. If you change this property, you must update the ServiceName property of installer classes as well.
Установите любые из следующих свойств для определения режима работы службы. Set any of the following properties to determine how your service will function.
Свойство. Property | Параметр Setting |
---|---|
CanStop | True , чтобы указать, что служба может принимать запросы на останов работы; false для предотвращения останова службы. True to indicate that the service will accept requests to stop running; false to prevent the service from being stopped. |
CanShutdown | True , чтобы указать, что служба хочет принимать уведомления о выключении компьютера, на котором она работает, позволяя ему вызывать процедуру OnShutdown. True to indicate that the service wants to receive notification when the computer on which it lives shuts down, enabling it to call the OnShutdown procedure. |
CanPauseAndContinue | True , чтобы указать, что служба может принимать запросы на приостановку или возобновление выполнения; false для предотвращения приостановки и возобновления работы службы. True to indicate that the service will accept requests to pause or to resume running; false to prevent the service from being paused and resumed. |
CanHandlePowerEvent | True , чтобы указать, что служба может обрабатывать уведомления об изменениях состояния питания компьютера; false , чтобы не сообщать службе об этих изменениях. True to indicate that the service can handle notification of changes to the computer’s power status; false to prevent the service from being notified of these changes. |
AutoLog | True для внесения информационных записей в журнал событий приложения, когда служба выполняет некоторое действие; false для отключения этой функции. True to write informational entries to the Application event log when your service performs an action; false to disable this functionality. Дополнительные сведения см. в разделе Практическое руководство. Запись сведений о службах в журнал. For more information, see How to: Log Information About Services. Примечание. По умолчанию свойство AutoLog имеет значение true . Note: By default, AutoLog is set to true . |
Когда CanStop или CanPauseAndContinue имеют значение false , диспетчер служб будет отключать пункты меню, отвечающие за остановку, приостановку или возобновление работы службы. When CanStop or CanPauseAndContinue are set to false , the Service Control Manager will disable the corresponding menu options to stop, pause, or continue the service.
Откройте редактор кода и введите данные для выполнения операций для процедур OnStart и OnStop. Access the Code Editor and fill in the processing you want for the OnStart and OnStop procedures.
Переопределите все прочие методы, для которых необходимо определить функциональные возможности. Override any other methods for which you want to define functionality.
Добавить установщики, необходимые для приложения службы. Add the necessary installers for your service application. Дополнительные сведения см. в разделе Практическое руководство. Добавление установщиков в приложение-службу. For more information, see How to: Add Installers to Your Service Application.
Скомпилируйте проект, выбрав в меню Сборка пункт Собрать решение. Build your project by selecting Build Solution from the Build menu.
Не нажимайте клавишу F5 для запуска проекта — таким способом нельзя запустить проект службы. Do not press F5 to run your project — you cannot run a service project in this way.
Установите службу. Install the service. Дополнительные сведения см. в разделе Практическое руководство. Установка и удаление служб. For more information, see How to: Install and Uninstall Services.