Как программно создать паузу в приложении Windows Service? - PullRequest
2 голосов
/ 05 мая 2011

Я создаю приложение службы Windows, которое мне хотелось бы программно приостановить при возникновении системной ошибки, соединения odbc или ошибки отсутствующего файла.Мне было интересно, если кто-нибудь знает, как это сделать?Приложение службы Windows использует соединение odbc и устройство чтения данных для соединения с базой данных MS Access и таблицей Oracle, поэтому есть вероятные ошибки, которые я буду обрабатывать с ними, я просто хочу позволить паузе для пользователя обрабатывать ошибки, если/ когда они происходят.

Ответы [ 3 ]

2 голосов
/ 05 мая 2011
ServiceController service = new ServiceController(serviceName);

TimeSpan timeout = TimeSpan.FromMilliseconds(timeoutValue);

service.Pause(); //or whatever you want here.
sevice.WaitForStatus(ServiceControllerStatus.Paused, timeout);

...

Затем, чтобы перезапустить, сделайте то же самое, за исключением

 service.Continue();
 sevice.WaitForStatus(ServiceControllerStatus.Running, timeout);

. Вы можете сделать это для любого состояния.Ознакомьтесь с документацией по msdn, прибегая к помощи SeviceController.Это будет первый возвращенный результат.

Кроме того, вам необходимо обработать события OnPause и OnContinue в вашей службе.

0 голосов
/ 06 мая 2011

Вы пробовали?

System.Threading.Thread.Sleep(1000); // sleep for 1 second

Настройте от 1000 до 1000 раз столько, сколько вы хотите, чтобы он спал в секундах.

0 голосов
/ 06 мая 2011

Предполагая, что ваша служба имеет непрерывный цикл, который проверяет данные, добавьте проверку во внешний источник для команд паузы / продолжения. Этот источник может представлять собой очередь сообщений, например MSMQ, или таблицу базы данных.

Я реализовал что-то подобное, благодаря тому, что моя служба постоянно проверяла таблицу на наличие команд и сообщала о своем состоянии в другой таблице. Когда он получает команду запуска, он запускает цикл обработки в другом потоке. Команда stop заставляет его сигнализировать потоку о постепенном выходе. Сервисное ядро ​​никогда не останавливается.

Пользователь взаимодействует через отдельное приложение с пользовательским интерфейсом, который позволяет ему просматривать состояние службы и отправлять команды. Поскольку приложение осуществляет управление через базу данных, оно не должно запускаться на той же машине, на которой работает служба.

...