如何检测Windows关机或注销

我需要检测Windowsclosures(或重新启动)或用户注销时。 我需要在应用程序closures之前正确closures应用程序。 我注意到在Windowsclosures的时候没有出现任何退出应用程序事件。

我读过这篇文章有没有办法在C#中检测到Windows关机/注销并取消该操作(询问用户后)

但是我不确定在结束之前我应该​​在哪里执行操作。 谢谢。

将事件处理程序方法附加到SystemEvents.SessionEnding事件中 ,并且每次引发事件时都会调用您的处理程序方法。 如果您愿意,处理这个事件将允许您取消挂起的日志closures或closures。 (尽pipe实际上并不像现在的操作系统中那样工作;更多信息请参阅这里的MSDN文档 。)

如果您不想取消该事件,只是对其作出适当的反应,则应该改为处理SystemEvents.SessionEnded事件 。

但是,必须确保在应用程序closures时分离事件处理程序,因为这两者都是静态事件。

如果代码没有在非交互式会话(如系统服务)中运行,则可以通过pinvoke使用本地解决scheme:

 //SM_SHUTTINGDOWN = 0x2000 bool bShutDownPending = GetSystemMetrics(SM_SHUTTINGDOWN) != 0;