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


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

Примечание.

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

См. также