Книга: 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 с, пока служба изменит статус на запрошенное значение. После этого времени информация в окне списка обновляется, и выбирается та же служба, чтобы выводился новый статус этой службы.

Выполняющееся приложение выглядит так:


Оглавление книги

Оглавление статьи/книги

Генерация: 2.923. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз