Поделиться через


Архитектура программирования приложений службы

Замечание

Эта статья не относится к размещенным службам в .NET. Последние сведения об использовании Microsoft.Extensions.Hosting.BackgroundService служб Windows и шаблоне рабочей службы см. в следующих статье:

Приложения службы Windows создаются на основе класса, который наследуется от класса System.ServiceProcess.ServiceBase. Вы переопределяете методы из этого класса и определяете функциональные возможности для них, чтобы определить, как работает служба.

Основными классами, участвующими в создании службы, являются:

Кроме того, для управления самой службой можно использовать именованный 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необходимо переопределить и определить обработку для связанных методов.

    Замечание

    Служба должна переопределить по крайней мере OnStart и OnStop, чтобы быть полезной.

Вы также можете использовать компонент под названием ServiceController чтобы взаимодействовать с существующей службой и управлять её поведением.

См. также