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


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

Обновлен: Ноябрь 2007

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

Основные классы, используемые при создании службы:

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

Определение поведения службы

Чтобы задать действия, выполняемые при изменении состояния службы в диспетчере управления службами, в классе службы необходимо переопределить базовые функции класса, отвечающие за эти действия. Для задания поведения службы можно переопределить перечисленные ниже методы класса ServiceBase.

Метод

Цель переопределения

OnStart

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

OnPause

Указание действий, которые должны быть выполнены при приостановке службы.

OnStop

Указание действий, которые должны быть выполнены при остановке службы.

OnContinue

Указание действий, которые должны быть выполнены при возобновлении работы службы после приостановки.

OnShutdown

Указание действий, которые должны быть выполнены непосредственно перед завершением работы системы, если служба в это время запущена.

OnCustomCommand

Указание действий, которые должны быть выполнены службой при получении настраиваемой команды. Дополнительные сведения о настраиваемых командах см. в библиотеке MSDN.

OnPowerEvent

Указание действий службы при возникновении события подсистемы управления питанием (например, сигнала о низком уровне зарядки аккумуляторов или приостановка системы).

yzk7ksy2.alert_note(ru-ru,VS.90).gifПримечание.

Эти методы соответствуют состояниям, через которые проходит служба в течение своего жизненного цикла. Например, служба не будет реагировать на команду OnContinue, если предварительно не был вызван метод OnStart.

Ниже перечислено еще несколько полезных свойств и методов. К ним относятся:

  • Метод Run класса ServiceBase. Это главная точка входа службы. При создании служб с использованием шаблона приложения службы Windows код, запускающий службу, помещается в метод приложения Main. Этот код может выглядеть следующим образом:

    Dim ServicesToRun() As System.ServiceProcess.ServiceBase
    ServicesToRun = New System.ServiceProcess.ServiceBase() _
        {New Service1()}
    System.ServiceProcess.ServiceBase.Run(ServicesToRun)
    
         System.ServiceProcess.ServiceBase[] ServicesToRun;
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new Service1() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    
         System.ServiceProcess.ServiceBase ServicesToRun[];
            ServicesToRun = new System.ServiceProcess.ServiceBase[] 
              { new Service1() };
            System.ServiceProcess.ServiceBase.Run(ServicesToRun);
    
    yzk7ksy2.alert_note(ru-ru,VS.90).gifПримечание.

    В этих примерах используется массив типа ServiceBase, в который могут быть добавлены все службы, содержащиеся в приложении. В дальнейшем эти службы могут быть запущены одновременно. При создании единичной службы можно не использовать массив, а объявить новый объект, наследующий от ServiceBase, и запустить его. Пример см. в разделе Практическое руководство. Создание службы программным способом.

  • Наборы свойств класса ServiceBase. Они определяют, какие методы службы можно вызывать. Например, если для свойства CanStop задано значение true, можно вызывать метод OnStop. Если для свойства CanPauseAndContinue задано значение true, могут вызываться методы OnPause и OnContinue. При задании для какого-либо из этих свойств значения true необходимо переопределить и реализовать соответствующие методы.

    yzk7ksy2.alert_note(ru-ru,VS.90).gifПримечание.

    Минимально функциональная служба должна переопределять по крайней мере методы OnStart и OnStop.

Для взаимодействия с существующими службами и управления их поведением можно использовать компонент ServiceController. Дополнительные сведения по использованию компонента ServiceController см. в разделе Наблюдение за службами Windows.

См. также

Задачи

Практическое руководство. Создание служб Windows

Основные понятия

Знакомство с приложениями служб Windows

Другие ресурсы

Наблюдение за службами Windows