Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

textBoxServiceStatus.Text = "Stopped";

buttonStop.Enabled = false;

break;

 case ServiceControllerStatus.StopPending:

textBoxServiceStatus.Text = "StopPending";

buttonStop.Enabled = false;

break;

 default:

textBoxServiceStatus.Text = "Unknown status";

break;

 }

}

protected void OnSelectedIndexChanged(object sender, System.EventArgs e) {

 ServiceController controller =

(ServiceController)listBoxServices.SelectedItem;

 textBoxDisplayName.Text = controllerDisplayName;

 textBoxServiceType.Text =

GetServiceTypeName(controller.ServiceType);

 textBoxServiceName.Text = controller.ServiceName;

 SetServiceStatus(controller);

}

Управление службой

С помощью класса

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

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

Поиск неисправностей

Поиск неисправностей работает для служб иначе, чем для обычных приложений. Лучший способ образовать службу — создание сначала требуемой функциональности и тестового клиента. В этом случае выполняется нормальная отладка и обработка ошибок. Как только приложение запустится, можно начинать создавать службу, используя эту сборку. Конечно, со службой по-прежнему возможны проблемы:

  • Читать дальше
  • 1
  • ...
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: