我有一个Topshelf C#服务,退出时必须恢复适配器DNS设置。我的停止/启动方法工作正常,此代码有效:
ManagementObject.InvokeMethod("SetDNSServerSearchOrder", DNS, null);
然而,关闭是一个问题,即使使用RequestAdditionalTime
我记录以下错误:
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)
因此,操作系统似乎阻止了对ManagementObject.InvokeMethod
我受阻了。有没有解决这个问题的方法?在启动时,我的服务检测到异常并恢复,但这需要太长时间。我真的很想能够优雅地关闭。
答案 0 :(得分:1)
Rocky,我只是重新创建了代码的功能元素(记录正在发生的事情),但我没有收到错误。我将DNSServerSearchOrder设置为null并将其提供给管理对象的SetDNSServerSearchOrder方法。 https://github.com/paulsbruce/StackOverflowExamples/blob/master/PriorityShutdown/PriorityShutdown/MyService.cs
我唯一的建议是,您可以尝试更改服务关闭顺序的优先级,看看是否有任何影响。请参阅此主题:.NET Windows Services stopping order when the system shutdown