Я реализовал службу серфинга Windows, которая предназначена для запуска бизнес-процесса по расписанию. После того, как процесс бизнес-процесса запущен, его нельзя прекращать, останавливая службу. Поэтому я использовал следующий метод: OnStop
Остановить службу Windows и избежать предупреждения об ошибке времени
protected override void OnStop()
{
/*
* Check, whether the business process is currently running;
*/
if (_sh.IsBusinessProcessRunning())
{
eventLog1.WriteEntry(String.Format(
"Stop instruction received! Service will be stopped, as soon the process '{0}' has completed. ",
ServiceHelper._businessExecutableName));
}
while (_sh.IsBusinessProcessRunning())
{
// Check each 30 seconds, whether the business process is still running
Thread.Sleep(30000);
}
eventLog1.WriteEntry("Service stopped!");
}
На самом деле это работает отлично, за исключением того, что я получаю тайм-аут, диалоговое окно ошибки, которые могут ввести в заблуждение клиента. Есть ли способ изменить сообщение в этом диалоговом окне или избежать его отображения? (Я бы предпочел, чтобы обновить сообщение, если это возможно)
Сообщение:
Сервис "..." на "локальный" не может быть прекращено. Служба не ответила на запрос запуска или контроля своевременно.
Можете ли вы перевести сообщение на английский, пожалуйста :) – OuSs
Вам нужно найти способ сохранить состояние этого бизнес-процесса и выйти. Ваш процесс может быть вырван из-под вас, если вы откажетесь закрыть его, когда OS просит вас. И создание «неудобных» сервисов начинает входить в область вредоносного ПО. –
Кроме того, конечно, если кто-то может попытаться остановить ваше обслуживание, они также могут почти наверняка заставить машину выключиться или перезагрузиться - так как вам нужно будет справиться с * этой * ситуацией таким образом, чтобы она не включалась бесконечно откладывая завершение работы, используйте любую стратегию, которую вы разрабатываете, чтобы справиться с этим, чтобы справиться с «Стоп». –