C# service InvokeMethod fails during Windows shutdown

0

I have a Topshelf C# service that must restore adapter DNS settings when exiting. My stop/start methods work just fine and this code works:

ManagementObject.InvokeMethod("SetDNSServerSearchOrder", DNS, null);

Shutdown, however, is a problem, even with RequestAdditionalTime

I log the following error:

2016-11-30 15:10:53,427 [7] TRACE MyDNSService - DNSService Shutdown command received.
2016-11-30 15:10:53,677 [7] DEBUG MyDNSService - DNSService Error setting DNS: A system shutdown is in progress. (Exception from HRESULT: 0x8007045B)

So it appears that the OS is blocking my call to ManagementObject.InvokeMethod

I'm stymied. Is there a way around this issue? On startup my service detects the anomaly and recovers, but that takes too long. I'd really like to be able to shutdown gracefully.

c#
windows-services
topshelf
system-shutdown
asked on Stack Overflow Dec 1, 2016 by Rocky • edited Dec 1, 2016 by Rocky

1 Answer

1

Rocky, I just re-created the functional elements of your code (logging what's happening) but I'm not getting the error. I'm setting the DNSServerSearchOrder to null and feeding that to the SetDNSServerSearchOrder method of the management object. https://github.com/paulsbruce/StackOverflowExamples/blob/master/PriorityShutdown/PriorityShutdown/MyService.cs

My only additional recommendation is that you can try changing the priority of the shutdown order of your service to see if that has any effect. See this thread: .NET Windows Services stopping order when the system shutdown

answered on Stack Overflow Dec 13, 2016 by Paul Bruce • edited May 23, 2017 by Community

User contributions licensed under CC BY-SA 3.0