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