下表摘要說明 Windows Vista 和 Windows XP 上的關機之間的差異。
| 特徵 | Windows XP | Windows Vista |
|---|---|---|
| 封鎖關機 | 應用程式可能會延遲回應 WM_QUERYENDSESSION 5 秒,然後系統可讓使用者終止應用程式。 傳 回 TRUE 以回應 WM_QUERYENDSESSION 的應用程式可能會延遲回應 WM_ENDSESSION 5 秒,然後系統可讓使用者終止應用程式。 | 應用程式可能會延遲回應 WM_QUERYENDSESSION 5 秒,然後系統可讓用戶繼續或取消關機。 傳回 true true 的應用程式,回應 WM_QUERYENDSESSION 可能會延遲回應 WM_ENDSESSION 5 秒,然後系統可讓用戶繼續或取消關機。 |
| 取消關機 | 如果應用程式傳回 FALSE 以回應 WM_QUERYENDSESSION,則大部分情況下會取消關機。 不過,不會顯示UI,因此使用者可能不知道已取消關機。 | 如果應用程式傳回 FALSE 以回應 WM_QUERYENDSESSION,它仍會出現在關機 UI 中。 請注意,系統不允許沒有可見視窗的控制台應用程式或應用程式取消關機。 如果這些應用程式在 5 秒內未回應 WM_QUERYENDSESSION 或 WM_ENDSESSION,或傳回 FALSE 以回應 WM_QUERYENDSESSION,則會自動終止這些應用程式。 |
| 關閉使用者介面 | 系統會顯示每個應用程式封鎖關機的對話框。 如果使用者按兩下 [[立即結束] 按鈕,應用程式就會終止。 如果使用者按兩下 [取消] 按鈕,則會取消關機,且應用程式會繼續執行。 | 系統會顯示全螢幕 UI,可識別所有封鎖關機的應用程式及其這樣做的原因(如果他們已使用 ShutdownBlockReasonCreate註冊原因)。 |
最佳做法
- 應用程式不應該封鎖關機。 儘快回應 WM_QUERYENDSESSION,並延後清除活動,直到處理 WM_ENDSESSION 訊息為止。
- 必須封鎖關機的應用程式應該使用新的 ShutdownBlockReasonCreate 函式來註冊說明使用者原因的字串。 用戶可以決定是否要繼續或取消關機。
- 應用程式無法依賴能夠封鎖關機。