9

我正在用 C# 编写一个 Windows 服务。我想在服务控制面板停止服务时采取与系统关闭时相同的操作。我想对这两种情况采取相同的行动。

我必须覆盖ServiceBase.OnShutdown(),还是ServiceBase.OnStop()两种情况都覆盖就足够了?

4

2 回答 2

8

是的。OnStop()当机器关闭时被调用。OnShutdown()用于当您需要特别知道机器正在关闭时。

更新: 正如自首次发布以来的评论中所指出的那样,情况不再如此。所以你的代码应该假设OnStop()在机器关闭时可能会或可能不会被调用。如果您需要在关机期间进行清理,请处理OnShutdown().

于 2013-01-25T14:03:48.503 回答
5

覆盖OnShutdown是正确的方法。OnStop关机期间不调用。

Microsoft Windows 添加了一个名为的选项,该选项Fast Startup实际上不会关闭计算机。

Fast Startup设置说明中所述,Restart不受影响。这就是为什么Restart触发OnShutdownShutdown不触发的原因。

关闭将同时Fast Startup触发和。OnShutdownRestartShutdown

电源选项系统设置

于 2018-12-14T16:39:41.063 回答