Службы Windows

43

Службы Windows представляют собой такие приложения, которые могут автоматически запускаться при загрузке операционной системы. Они могут функционировать и без осуществления пользователем интерактивного входа в систему и производить в фоновом режиме какие-то операции по обработке.

Например, на сервере Windows Server сетевые службы системы позволяют клиентам получать к ним доступ без прохождения пользователем процедуры регистрации на сервере, а в клиентских системах службы позволяют загружать новую версию программного обеспечения из Интернета или выполнять очистку файлов на локальном диске.

Службы Windows можно сконфигурировать так, чтобы они выполнялись от имени специально созданной учетной записи пользователя или от имени учетной записи системы, т.е. учетной записи, которая имеет более высокие привилегии, чем учетная запись администратора системы. В дальнейшем изложении, если не указано иначе, то при упоминании службы имеется в виду именно служба Windows. • Ниже приведено несколько примеров служб Windows:

Простой компонент TCP/IP Services (Службы TCP/IP)

Представляет собой служебную программу, которая обслуживает небольшие серверы TCP/IP: отображение (echo), дата и время (daytime), цитаты (quote) и т.п.

Компонент World Wide Publishing Service (Служба WWW)

Представляет собой одну из служб информационного сервера Интернета (Internet Information Server — IIS).

Компонент Event Log (Журнал событий)

Представляет собой службу для регистрации сообщений в системе регистрации событий.

Компонент Windows Search (Поиск Windows)

Представляет собой службу, которая создает индексы данных на диске.

Для просмотра всех служб, имеющихся в системе, предусмотрен инструмент администрирования под названием Services (Службы), окно которого показано на рисунке. Этот инструмент доступен в разделе Administrative Tools (Администрирование).

Службы Windows

Для оперирования службой Windows необходимы три программы следующего типа:

Программа службы предоставляет действительную функциональность. Программа для управления службой позволяет отправлять службе запросы, касающиеся управления, например, запросы на запуск, останов, приостановку и возобновление ее работы.

Программа для конфигурирования службы позволяет устанавливать службу — она выполняет необходимое копирование в файловую систему, вносит соответствующие записи в системный реестр и настраивает результат как службу. Хотя компоненты .NET и могут устанавливаться с помощью просто команды хсору, поскольку им не обязательно записывать информацию о себе в системный реестр, установка служб требует выполнения соответствующей настройки в системном реестре. Программа для конфигурирования службы может применяться и для изменения конфигурации данной службы в более позднее время.

О каждом из этих трех составляющих службы Windows более подробно рассказывается в следующих подразделах.

Программа службы

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

За реализацию функциональных возможностей отвечает программа службы. Она должна состоять из трех частей:

Для начала следует ознакомиться с диспетчером управления службами — Service Control Manager (SCM). Этот диспетчер играет важную роль для служб. Именно он отправляет службам запросы на выполнение запуска или остановки.

Диспетчер управления службами

Диспетчер управления службами (Service Control Manager — SCM) представляет собой часть операционной системы, которая взаимодействует со службами. На рисунке это взаимодействие показано на диаграмме последовательностей:

Взаимодействие между службой и диспетчером SCM

Во время загрузки системы запускается каждый процесс, для которого настроен автоматический запуск службы, и вызывается его главная функция. Служба отвечает за регистрацию главных служебных функций для всех своих составляющих. Главная функция служит точкой входа в программу службы и в ней с помощью SCM должны регистрироваться точки входа для всех ее главных служебных функций.

Главная функция, главная служебная функция и обработчики

Главная функция службы представляет собой обычную точку входа в программу, т.е. метод Main(). В ней может регистрироваться более одной главной служебной функции. В главной служебной функции содержится сама функциональность службы. Служебная программа должна регистрировать главную служебную функцию для каждой из предоставляемых ею служб. Одна служебная программа может предоставлять множество служб; например, <windows>\system32\services.ехе представляет собой служебную программу, которая включает помимо прочих элементов такие службы, как Alerter, Application Management, Computer Browser и DHCP Client.

Далее диспетчер SCM вызывает главные служебные функции каждой из подлежащих запуску служб. Одной из важнейших задач главной служебной функции является регистрация обработчика в SCM.

Функция-обработчик представляет собой третью часть служебной программы. Она должна обязательно уметь отвечать на события SCM. Работа служб может останавливаться, приостанавливаться и возобновляться, и обработчик должен обязательно быть способен реагировать на все такие события.

После регистрации обработчика в SCM программа для управления службой может начинать посылать SCM запросы на завершение, приостановку и возобновление работы службы. Эта программа не зависит ни от SCM, ни от самой службы. В операционной системе поставляется множество подобных программ; одной из них является, например, оснастка Services (Службы) консоли ММС, упомянутая ранее. Можно также писать собственные программы для управления службами; хороший пример — приложение SQL Server Configuration Manager (Диспетчер настройки сервера SQL).

Программа для управления службой

Программа для управления службой, как не трудно догадаться по ее названию, позволяет управлять службой. Для завершения, приостановки и возобновления работы службы ей могут посылаться соответствующие управляющие коды, и обработчик должен на них реагировать. Можно также запрашивать текущее состояние службы и реализовать специальный код обработки, способный реагировать на специальные управляющие коды.

Программа для конфигурирования службы

Из-за того, что службы должны настраиваться соответствующим образом в системном реестре, применять для их установки команду хсору нельзя. В системном реестре содержится параметр, отвечающий за то, как должна запускаться служба. Он может быть настроен так, чтобы служба запускалась автоматически или вручную либо вообще была отключена. Также необходимо настраивать пользователя служебной программы и зависимости службы, например, другие службы, которые должны запускаться перед запуском данной.

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

Классы, с помощью которых можно реализовать три описанных составляющих службы, находятся в пространстве имен System.ServiceProcess:

Класс ServiceBase

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

Класс ServiceController

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

Классы ServiceProcessInstaller и ServiceInstaller

Как не трудно догадаться по их именам, позволяют устанавливать и конфигурировать программы служб.

Теперь можно переходить к рассмотрению процесса создания новой службы.

Пройди тесты
Лучший чат для C# программистов