Windows关闭期间C#service InvokeMethod失败

时间:2016-12-01 18:51:06

标签: c# windows-services topshelf system-shutdown

我有一个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

的调用

我受阻了。有没有解决这个问题的方法?在启动时,我的服务检测到异常并恢复,但这需要太长时间。我真的很想能够优雅地关闭。

1 个答案:

答案 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