Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Эта статья не относится к размещенным службам в .NET. Последние сведения об использовании Microsoft.Extensions.Hosting.BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:
Приложения службы Windows создаются на основе класса, который наследуется от класса System.ServiceProcess.ServiceBase. Вы переопределяете методы из этого класса и определяете функциональные возможности для них, чтобы определить, как работает служба.
Основными классами, участвующими в создании службы, являются:
System.ServiceProcess.ServiceBase — Вы переопределяете методы из класса ServiceBase при создании сервиса и определяете код, чтобы задать функциональность вашего сервиса в этом производном классе.
System.ServiceProcess.ServiceProcessInstaller и System.ServiceProcess.ServiceInstaller — эти классы используются для установки и удаления службы.
Кроме того, для управления самой службой можно использовать именованный ServiceController класс. Этот класс не участвует в создании службы, но может использоваться для запуска и остановки службы, передачи команд в нее и возврата ряда перечислений.
Определение поведения службы
В классе служб переопределяются функции базового класса, определяющие, что происходит при изменении состояния службы в диспетчере управления службами. Класс ServiceBase предоставляет следующие методы, которые можно переопределить для добавления пользовательского поведения.
| Метод | Переопределить на |
|---|---|
| OnStart | Укажите, какие действия следует предпринять при запуске службы. Чтобы служба выполняла полезную работу, необходимо написать код в этой процедуре. |
| OnPause | Укажите, что должно произойти при приостановке службы. |
| OnStop | Укажите, что должно произойти при остановке работы службы. |
| OnContinue | Укажите, что должно произойти, когда служба возобновляет нормальное функционирование после приостановки. |
| OnShutdown | Укажите, что должно произойти перед выключением системы, если служба в это время работает. |
| OnCustomCommand | Укажите, что должно происходить, когда служба получает пользовательскую команду. Дополнительные сведения о пользовательских командах см. в интернете в MSDN. |
| OnPowerEvent | Укажите, как служба должна реагировать при получении события управления питанием, например низкий заряд батареи или приостановка работы. |
Замечание
Эти методы представляют состояния, через которые проходит служба в ходе своего жизненного цикла; служба переходит из одного состояния в следующее. Например, служба никогда не будет реагировать на OnContinue команду до вызова OnStart.
Существует несколько других свойств и методов, представляющих интерес. К ним относятся:
Метод Run класса ServiceBase. Это основная точка входа для службы. При создании службы с помощью шаблона службы Windows код вставляется в метод приложения
Mainдля запуска службы. Этот код выглядит следующим образом:ServiceBase[] ServicesToRun; ServicesToRun = new ServiceBase[] { new Service1() }; Run(ServicesToRun);Dim ServicesToRun() As System.ServiceProcess.ServiceBase ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service1()} System.ServiceProcess.ServiceBase.Run(ServicesToRun)Замечание
В этих примерах используется массив типа ServiceBase, в который можно добавить все службы, содержащиеся в вашем приложении, и затем запускать их вместе. Однако если вы создаете только одну службу, вы можете не использовать массив и просто объявить новый объект, наследующий от ServiceBase, а затем запустить его. Пример см. в статье "Практическое руководство. Написание служб программным способом".
Ряд свойств класса ServiceBase . Эти правила определяют, какие методы можно вызывать в вашей службе. Например, если свойство CanStop установлено в значение
true, можно вызвать метод OnStop в вашей службе. Если для свойства CanPauseAndContinue задано значениеtrue, можно вызвать методы OnPause и OnContinue. При установке одного из этих свойствtrueнеобходимо переопределить и определить обработку для связанных методов.
Вы также можете использовать компонент под названием ServiceController чтобы взаимодействовать с существующей службой и управлять её поведением.