Windows Vista 的关机更改

下表总结了 Windows Vista 和 Windows XP 上的关机之间的差异。

功能 Windows XP Windows Vista
阻止关闭 应用程序可将 响应WM_QUERYENDSESSION 延迟 5 秒,然后系统允许用户终止应用程序。 返回 TRUE 以响应 WM_QUERYENDSESSION 的应用程序可以将 响应WM_ENDSESSION 延迟 5 秒,然后系统允许用户终止应用程序。 应用程序可能会延迟 响应WM_QUERYENDSESSION 5 秒,然后系统允许用户继续或取消关闭。 返回 TRUE 以响应 WM_QUERYENDSESSION 的应用程序可能会延迟响应 WM_ENDSESSION 5 秒,然后系统允许用户继续或取消关闭。
取消关闭 如果应用程序返回 FALSE 以响应 WM_QUERYENDSESSION,则在大多数情况下会取消关闭。 但是,不会显示任何 UI,因此用户可能不知道已取消关闭。 如果应用程序返回 FALSE 以响应 WM_QUERYENDSESSION,它仍然显示在关闭 UI 中。 请注意,系统不允许控制台应用程序或没有可见窗口的应用程序取消关闭。 如果这些应用程序未在 5 秒内响应 WM_QUERYENDSESSIONWM_ENDSESSION ,或者它们返回 FALSE 以响应 WM_QUERYENDSESSION,则它们将自动终止。
关闭用户界面 系统为每个阻止关闭的应用程序显示一个对话框。 如果用户单击“ 立即结束 ”按钮,应用程序将终止。 如果用户单击“ 取消 ”按钮,则会取消关闭,应用程序将继续运行。 系统将显示一个全屏 UI,它标识所有应用程序阻止关闭及其这样做的原因 (,如果他们已使用 ShutdownBlockReasonCreate) 注册原因。

 

最佳实践

  • 应用程序不应阻止关闭。 尽快响应 WM_QUERYENDSESSION ,并推迟清理活动,直到处理 WM_ENDSESSION 消息。
  • 必须阻止关闭的应用程序应使用新的 ShutdownBlockReasonCreate 函数注册一个向用户解释原因的字符串。 用户可以决定是继续还是取消关闭。
  • 应用程序不能依赖于能够阻止关闭。