【问题标题】:C# service InvokeMethod fails during Windows shutdownC# 服务 InvokeMethod 在 Windows 关闭期间失败
【发布时间】:2016-12-01 18:51:06
【问题描述】:

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

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

【问题讨论】:

  • 看起来你可以在这里找到答案stackoverflow.com/questions/5217246/…
  • 谢谢,不幸的是,这并没有完全涵盖它。服务关闭方法执行良好,由于操作系统关闭而不是服务关闭,是操作系统阻止了我设置 DNS 的调用。
  • 如何设置一个标记,当操作系统再次恢复并且您的服务启动时,它应该恢复 DNS。因为当机器关闭时,无论如何都不会重置 DNS。
  • @Gurpreet 这是我目前的解决方法。

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


【解决方案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

【讨论】:

  • 哇!非常感谢。我不太明白 SetProcessShutdownParameters(0x3FF, 0x00000001); 是什么正在做,但我会尝试的。赏金将是你的,我预测......
  • 仍然收到我的错误,但你给了我一个很好的继续前进的道路。赏金是你的。如果我终于能够弄清楚为什么我的服务在关闭时设置 DNS 时仍然出错,我会再次跟进。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
相关资源
最近更新 更多