Моя служба Windows - это сервер данных с большим объемом кэша. Во время обслуживания OnStop я сохраняю кеш, чтобы данные не терялись. Сохранение кэша может занять несколько минут, поэтому для предотвращения тайм-аута диспетчера служб Windows я использую обратный вызов SetServiceStatus Win32:
this.serviceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
this.serviceStatus.checkPoint = 1;
this.serviceStatus.waitHint = 60000;
SetServiceStatus(Process.GetCurrentProcess().Handle, ref this.serviceStatus);
Это прекрасно работает.
Я также установил для CanShutdown значение true и добавил OnShutdown, чтобы служба была защищена от отключения системы. Здесь я фактически делаю то же самое, что и в OnStop:
protected override void OnShutdown()
{
this.OnStop();
base.OnShutdown();
}
Это не слишком хорошо работает. Когда система выключается, когда кеш сохраняется, я получаю «Устройство не готово». Это говорит о том, что Windows прерывает службу, прежде чем она будет остановлена / выключена. Предотвращение этого с SetServiceStatus, по-видимому, не работает.
Как мне получить больше времени (задержка перезагрузки), чтобы выполнить сохранение?
Любые предложения приветствуются.