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


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)

Применяется к

См. также раздел