我正在制作一个应用程序,它可以在我们的每台PC上随机运行。它工作正常,但如果PC当前正在关闭,那么我无法读取WMI,我得到一些错误。因此,我需要确定PC当前是否正在关闭,因此我可以避免这些错误。有人有想法吗?
谢谢!
答案 0 :(得分:5)
使用索引SM_SHUTTINGDOWN
(0x2000
)拨打GetSystemMetrics
。
答案 1 :(得分:2)
创建隐藏的顶级窗口并收听WM_ENDSESSION
条消息。 wParam
的值将告诉您整个系统是否正在关闭,或者用户是否正在注销。
如果您的应用是控制台应用,请使用SetConsoleCtrlHandler
注册以接收关机通知。
答案 2 :(得分:1)
任何检测到这种情况的尝试都会出现竞争情况:系统关闭可能会在您检测到它没有关闭之后立即启动,但在您尝试执行在关闭期间无法运行的操作之前。因此,解决问题的方法是错误的。相反,您只需要处理WMI读取失败并确定它们是否由系统关闭引起,并且在这种情况下中止操作或以任何其他有意义的方式继续操作。
有可能使用一种同步关闭检测机制,您可以在关闭之前实际锁定/延迟关闭一段时间,然后在该间隔内进行处理。如果是这样,那也是一种没有竞争条件的安全方法。