Книга: C# для профессионалов. Том II
Управление службой
Управление службой
С помощью класса ServiceController
можно также посылать службе управляющие запросы.
Методы ServiceController |
|
---|---|
Start() |
Start() сообщает SCM, что служба должна быть запущена. В нашей служебной программе вызывается OnStart() . |
Stop() |
Stop() вызывает OnStop() в нашей служебной программе с помощью SCM, если свойство CanStop задано как true в классе службы |
Pause() |
Pause() вызывает OnPause() , если свойство CanPauseAndContinue задано как true. |
Continue() |
Continue() вызывает OnContinue() , если свойство CanPauseAndContinue задано как true. |
ExecuteCommand() |
С помощью ExecuteCommand можно послать службе специальную команду. |
Код для управления службой следует далее. Так как код для запуска, останова, приостановки и временной остановки аналогичен, то используется только одна программа обработки для четырех кнопок:
protected void buttonCommand_Click(object sender, System.EventArgs e) {
Cursor Current = Cursors.WaitCursor;
ServiceController controller =
(ServiceController)listBoxServices.SelectedItem;
if (sender == this.buttonStart) {
controller.Start();
controller.WaitForStatus(ServiceControllerStatus.Running);
} else if (sender == this.buttonStop) {
controller.Stop();
controller.WaitForStatus(ServiceControllerStatus.Stopped);
} else if (sender == this.buttonPause) {
controller.Pause();
controller.WaitForStatus(ServiceControllerStatus.Paused);
} else if (sender == this.buttonContinue) {
controller.Continue();
controller.WaitForStatus(ServiceControllerStatus.Running);
}
int index = listBoxService.SelectedIndex;
RefreshServiceList();
listBoxServices.SelectedIndex = index;
Cursor.Current = Cursors.Default;
}
protected void buttonExit_Click(object sender, System.EventArgs e) {
Application.Exit();
}
protected void buttonRefresh_Click(object sender, System.EventArgs e) {
RefreshServiceList();
}
Это действие может потребовать некоторого времени, поэтому курсор в первой инструкции переключается в курсор ожидания. С помощью метода WaitForStatus()
мы ожидаем максимум только 10 с, пока служба изменит статус на запрошенное значение. После этого времени информация в окне списка обновляется, и выбирается та же служба, чтобы выводился новый статус этой службы.
Выполняющееся приложение выглядит так: