Search code examples
c#.netwindows-servicestimeoutsystem-shutdown

.NET windows service aborted during system shutdown


My windows service is a data server with substantial cache. During service OnStop I save the cache so that no data is lost. Saving cache may take several minutes so to prevent windows service manager from timeout I use SetServiceStatus Win32 callback:

this.serviceStatus.currentState = (int)State.SERVICE_STOP_PENDING;
this.serviceStatus.checkPoint = 1;
this.serviceStatus.waitHint = 60000;
SetServiceStatus(Process.GetCurrentProcess().Handle, ref this.serviceStatus);

That works fine.

I have also set CanShutdown to true and added OnShutdown so that service would be system shutdown proof. Here I effectively do the same thing as in OnStop:

protected override void OnShutdown()
{
    this.OnStop(); 
    base.OnShutdown();
}

That does not work too good. When system shuts down, when cache is being saved I get "The device is not ready". This suggests that Windows aborts service before it is done stopping / shutting down. Preventing that with SetServiceStatus apparently does not work.

How do I get more time (delay reboot) to get saving done?

Any suggestions welcome.


Solution

  • After some testing it looks that it was a problem with the system rather than with my service.