0

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

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

4

1 回答 1

1

洛基,我刚刚重新创建了代码的功能元素(记录正在发生的事情),但我没有收到错误消息。我将 DNSServerSearchOrder 设置为 null 并将其提供给管理对象的 SetDNSServerSearchOrder 方法。https://github.com/paulsbruce/StackOverflowExamples/blob/master/PriorityShutdown/PriorityShutdown/MyService.cs

我唯一的额外建议是,您可以尝试更改服务关闭顺序的优先级,看看是否有任何影响。请参阅此线程:系统关闭时.NET Windows 服务停止顺序

于 2016-12-13T16:16:00.547 回答