Программная архитектура приложений служб
Основой приложений служб Windows являются классы, наследующие от класса System.ServiceProcess.ServiceBase. Чтобы определить поведение служб, необходимо переопределять методы этих классов, реализуя в них требуемые функциональные возможности.
Основные классы, используемые при создании службы:
System.ServiceProcess.ServiceBase — при создании службы и разработке кода, отвечающего за функциональные возможности службы, в наследуемом классе необходимо переопределить методы класса ServiceBase;
System.ServiceProcess.ServiceProcessInstaller и System.ServiceProcess.ServiceInstaller — эти классы используются для установки и удаления службы.
Кроме того, для управления службой может использоваться класс ServiceController. Этот класс не используется при создании службы, однако с его помощью можно осуществлять запуск и остановку службы, передавать ей команды и возвращать последовательности перечислений.
Определение поведения службы
Чтобы задать действия, выполняемые при изменении состояния службы в диспетчере управления службами, в классе службы необходимо переопределить базовые функции класса, отвечающие за эти действия. Для задания поведения службы можно переопределить перечисленные ниже методы класса ServiceBase.
Метод |
Цель переопределения |
---|---|
Указание действий, которые должны быть выполнены при начале работы службы. В этой процедуре должен содержаться код, выполняющий требуемые действия. |
|
Указание действий, которые должны быть выполнены при приостановке службы. |
|
Указание действий, которые должны быть выполнены при остановке службы. |
|
Указание действий, которые должны быть выполнены при возобновлении работы службы после приостановки. |
|
Указание действий, которые должны быть выполнены непосредственно перед завершением работы системы, если служба в это время запущена. |
|
Указание действий, которые должны быть выполнены службой при получении настраиваемой команды. Дополнительные сведения о настраиваемых командах см. в библиотеке MSDN. |
|
Указание действий службы при возникновении события подсистемы управления питанием (например, сигнала о низком уровне зарядки аккумуляторов или приостановка системы). |
Примечание
Эти методы соответствуют состояниям, через которые проходит служба в течение своего жизненного цикла.Например, служба не будет реагировать на команду 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);
Примечание
В этих примерах используется массив типа ServiceBase, в который могут быть добавлены все службы, содержащиеся в приложении. В дальнейшем эти службы могут быть запущены одновременно.При создании единичной службы можно не использовать массив, а объявить новый объект, наследующий от ServiceBase, и запустить его.Пример см. в разделе Практическое руководство. Создание службы программным способом.
Наборы свойств класса ServiceBase. Они определяют, какие методы службы можно вызывать. Например, если для свойства CanStop задано значение true, можно вызывать метод OnStop. Если для свойства CanPauseAndContinue задано значение true, могут вызываться методы OnPause и OnContinue. При задании для какого-либо из этих свойств значения true необходимо переопределить и реализовать соответствующие методы.
Для взаимодействия с существующими службами и управления их поведением можно использовать компонент ServiceController.
См. также
Задачи
Практическое руководство. Создание служб Windows