Windows 如何在关闭计算机时关闭程序?
How does Windows close a program when shutting down the computer?
如果您在我的应用程序处于 运行 时关闭计算机,我的应用程序会抛出一些奇怪的错误。
有时候消息是(地址)内存不能"read",有时候不能是"write".
以正常方式关闭应用程序不会生成此类消息。
如何模拟 "windows shutdown" 以便调试我的应用程序?我如何才能找出应用程序正在尝试执行但它无法执行的操作?
当Windows要关机时,它会向应用程序发送一系列事件;比如WM_ENDSESSION
and WM_QUIT
。您可以在您正在使用的消息处理程序中处理这些;一般来说,应用程序需要对这些消息做出适当且快速的响应,否则 OS 将终止应用程序。我不确定 wxwidgets 在这方面提供了什么默认处理。连接到这些将有助于诊断应用程序错误本身。
您可以尝试做一些事情;
- 关机序列不容易模拟(如果有的话) - 关机期间会发生很多事情;确切的状态和情况很难完整模拟。
- 就关闭前诊断应用程序的状态而言,您可以尝试处理
WM_QUERYENDSESSION
并用 FALSE
响应以防止它关闭(使用较新版本的 Windows 您无法再阻止关机,因此它可能无法正常工作,具体取决于您所在的平台。
- 您还可以尝试测试应用程序对
WM_ENDSESSION
消息的即时响应,方法是向应用程序发送 WM_ENDSESSION
(例如通过 PostMessage
)以及 MSDN 上详述的适当数据。
对于基于终端的应用程序;
如果需要,您还可以挂接信号(我相信 SIGKILL
)。请参阅此 Microsoft reference for more detail. You can also the the SetConsoleCtrlHandler
挂钩。但是既然你使用了一个工具包,那么最好使用已经发送到应用程序的消息。
如果您在我的应用程序处于 运行 时关闭计算机,我的应用程序会抛出一些奇怪的错误。
有时候消息是(地址)内存不能"read",有时候不能是"write".
以正常方式关闭应用程序不会生成此类消息。
如何模拟 "windows shutdown" 以便调试我的应用程序?我如何才能找出应用程序正在尝试执行但它无法执行的操作?
当Windows要关机时,它会向应用程序发送一系列事件;比如WM_ENDSESSION
and WM_QUIT
。您可以在您正在使用的消息处理程序中处理这些;一般来说,应用程序需要对这些消息做出适当且快速的响应,否则 OS 将终止应用程序。我不确定 wxwidgets 在这方面提供了什么默认处理。连接到这些将有助于诊断应用程序错误本身。
您可以尝试做一些事情;
- 关机序列不容易模拟(如果有的话) - 关机期间会发生很多事情;确切的状态和情况很难完整模拟。
- 就关闭前诊断应用程序的状态而言,您可以尝试处理
WM_QUERYENDSESSION
并用FALSE
响应以防止它关闭(使用较新版本的 Windows 您无法再阻止关机,因此它可能无法正常工作,具体取决于您所在的平台。 - 您还可以尝试测试应用程序对
WM_ENDSESSION
消息的即时响应,方法是向应用程序发送WM_ENDSESSION
(例如通过PostMessage
)以及 MSDN 上详述的适当数据。
对于基于终端的应用程序;
如果需要,您还可以挂接信号(我相信 SIGKILL
)。请参阅此 Microsoft reference for more detail. You can also the the SetConsoleCtrlHandler
挂钩。但是既然你使用了一个工具包,那么最好使用已经发送到应用程序的消息。