ServiceBase Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет базовый класс для службы, которая будет существовать в рамках служебного приложения. При создании нового класса службы необходимо наследовать от класса ServiceBase.
public ref class ServiceBase : System::ComponentModel::Component
public class ServiceBase : System.ComponentModel.Component
type ServiceBase = class
inherit Component
Public Class ServiceBase
Inherits Component
- Наследование
- Производный
Комментарии
Наследование от ServiceBase при определении класса службы в приложении-службе. Любая полезная служба переопределяет методы OnStart и OnStop . Для дополнительных функций можно переопределить OnPause и OnContinue с определенным поведением в ответ на изменения в состоянии службы.
Служба — это длительный исполняемый файл, который не поддерживает пользовательский интерфейс и может не выполняться под учетной записью пользователя, выполнившего вход. Служба может выполняться без входа пользователя на компьютер.
По умолчанию службы выполняются под системной учетной записью, которая отличается от учетной записи администратора. Вы не можете изменить права системной учетной записи. Кроме того, можно использовать ServiceProcessInstaller для указания учетной записи пользователя, с которой будет выполняться служба.
Исполняемый файл может содержать несколько служб, но должен содержать отдельную ServiceInstaller для каждой службы. Экземпляр ServiceInstaller регистрирует службу в системе. Установщик также связывает каждую службу с журналом событий, который можно использовать для записи команд службы. Функция main()
в исполняемом файле определяет, какие службы должны выполняться. Текущим рабочим каталогом службы является системный каталог, а не каталог, в котором находится исполняемый файл.
При запуске службы система находит исполняемый файл и запускает OnStart метод для этой службы, содержащийся в исполняемом файле. Однако запуск службы не совпадает с запуском исполняемого файла. Исполняемый файл загружает только службу. Доступ к службе (например, запущен и остановлен) осуществляется через диспетчер управления службами.
Исполняемый ServiceBase файл вызывает конструктор производного класса при первом вызове start в службе. Метод OnStart обработки команд вызывается сразу после выполнения конструктора. Конструктор не выполняется повторно после первой загрузки службы, поэтому необходимо отделить обработку, выполняемую конструктором, от обработки, выполняемой OnStart. Все ресурсы, которые могут быть освобождены, OnStop должны быть созданы в OnStart. Создание ресурсов в конструкторе предотвращает их правильное создание, если служба снова запускается после OnStop освобождения ресурсов.
Диспетчер управления службами (SCM) предоставляет способ взаимодействия со службой. SCM можно использовать для передачи в службу команд Start, Stop, Pause, Continue или пользовательских команд. SCM использует значения CanStop и CanPauseAndContinue , чтобы определить, принимает ли служба команды Stop, Pause или Continue. Stop, Pause и Continue включены в контекстных меню SCM, только если соответствующее свойство CanStop или CanPauseAndContinue находится true
в классе службы. Если этот параметр включен, команда передается службе и OnStopвызывается , OnPauseили OnContinue . Если CanStopпараметр , CanShutdownили CanPauseAndContinue имеет значение false
, соответствующий метод обработки команд (например OnStop, ) не будет обрабатываться, даже если вы реализовали метод .
Класс можно использовать для программного ServiceController выполнения действий SCM с помощью пользовательского интерфейса. Вы можете автоматизировать задачи, доступные в консоли. Если CanStopимеет значение , CanShutdownили CanPauseAndContinue , true
но вы не реализовали соответствующий метод обработки команд (например, OnStop), система выдает исключение и игнорирует команду .
Вам не нужно реализовывать OnStart, OnStopили любой другой метод в ServiceBase. Однако поведение службы описано в OnStart, поэтому, по крайней мере, этот элемент должен быть переопределен. Функция main()
исполняемого файла регистрирует службу в исполняемом файле в диспетчере управления службами путем Run вызова метода . Свойство ServiceName объекта, передаваемого ServiceBase методу Run , должно соответствовать свойству ServiceName установщика службы для этой службы.
Вы можете использовать для InstallUtil.exe
установки служб в системе.
Примечание
Для получения уведомлений о вызовах службы можно указать журнал, отличный от журнала событий приложения, но ни AutoLog свойство , ни EventLog свойство не могут записывать данные в пользовательский журнал. Задайте значение AutoLog , false
если вы не хотите использовать автоматическое ведение журнала.
Конструкторы
ServiceBase() |
Создает новый экземпляр класса ServiceBase. |
Поля
MaxNameLength |
Указывает максимальный размер имени службы. |
Свойства
AutoLog |
Определяет необходимость записи в журнал событий команд запуска, останова, паузы и возобновления. |
CanHandlePowerEvent |
Получает или задает значение, указывающее, может ли служба обрабатывать уведомления об изменениях состояния питания компьютера. |
CanHandleSessionChangeEvent |
Получает или задает значение, показывающее, может ли служба обрабатывать события изменения сеанса, принимаемые от сеанса сервера терминалов. |
CanPauseAndContinue |
Получает или задает значение, определяющее возможность приостановки и возобновления работы службы. |
CanRaiseEvents |
Возвращает значение, показывающее, может ли компонент вызывать событие. (Унаследовано от Component) |
CanShutdown |
Получает или задает значение, определяющее необходимость уведомления службы о завершении работы системы. |
CanStop |
Получает или задает значение, определяющее, можно ли остановить работу службы после ее запуска. |
Container |
Возвращает объект IContainer, который содержит коллекцию Component. (Унаследовано от Component) |
DesignMode |
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время. (Унаследовано от Component) |
EventLog |
Получает журнал событий, который можно использовать для записи в журнал событий приложения уведомлений о вызовах команд службы, например, команд запуска и останова. |
Events |
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component. (Унаследовано от Component) |
ExitCode |
Получает или задает код завершения для службы. |
ServiceHandle |
Получает дескриптор управления службой. |
ServiceName |
Получает или задает короткое имя, используемое для идентификации службы в системе. |
Site |
Получает или задает ISite объекта Component. (Унаследовано от Component) |
Методы
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
Dispose() |
Освобождает все ресурсы, занятые модулем Component. (Унаследовано от Component) |
Dispose(Boolean) |
Уничтожает ресурсы (кроме памяти), используемые классом ServiceBase. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Устаревшие..
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container. (Унаследовано от Component) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
OnContinue() |
Если метод OnContinue() реализован в производном классе, он запускается при передаче службе команды возобновления диспетчером служб. Задает действия, подлежащие выполнению при возобновлении нормальной работы службы после ее приостановки. |
OnCustomCommand(Int32) |
Если метод OnCustomCommand(Int32) реализован в производном классе, он выполняется при передаче службе пользовательской команды диспетчером служб. Задает действия, подлежащие выполнению при появлении команды с указанным значением параметра. |
OnPause() |
Если этот метод реализован в производном классе, он выполняется при передаче службе команды паузы диспетчером служб. Задает действия, подлежащие выполнению при приостановке работы службы. |
OnPowerEvent(PowerBroadcastStatus) |
Если этот метод реализован в производном классе, он выполняется при изменении состояния питания компьютера. Это применимо для переносных компьютеров, когда они переходят в режим приостановки (этот режим отличается от режима завершения работы системы). |
OnSessionChange(SessionChangeDescription) |
Выполняется при получении события изменения от сеанса сервера терминалов. |
OnShutdown() |
Если этот метод реализован в производном классе, он выполняется при завершении работы системы. Задает действия, выполняемые непосредственно перед завершением работы системы. |
OnStart(String[]) |
Если этот метод реализован в производном классе, он выполняется при передаче службе команды запуска диспетчером служб или при запуске операционной системы (для служб, запускаемых автоматически). Задает действия, подлежащие выполнению при запуске службы. |
OnStop() |
Если этот метод реализован в производном классе, он выполняется при передаче службе команды останова диспетчером служб. Задает действия, подлежащие выполнению при останове службы. |
RequestAdditionalTime(Int32) |
Запрашивает дополнительное время для отложенной операции. |
RequestAdditionalTime(TimeSpan) |
При вызове этого метода из OnStart, OnStop, OnPause или OnContinue указанное указание ожидания передается диспетчеру управления службами, чтобы служба не помечалась как не отвечая. |
Run(ServiceBase) |
Регистрирует исполняемый файл для службы с помощью диспетчера служб. |
Run(ServiceBase[]) |
Регистрирует исполняемый файл для нескольких служб с помощью диспетчера служб. |
ServiceMainCallback(Int32, IntPtr) |
Регистрирует обработчик команд и запускает службу. |
Stop() |
Останавливает работающую службу. |
ToString() |
Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять. (Унаследовано от Component) |
События
Disposed |
Возникает при удалении компонента путем вызова метода Dispose(). (Унаследовано от Component) |