應用程式的指導方針
在 Windows Vista 和 Windows Server 2008 上執行的應用程式應遵循這些指導方針,以確保重新啟動管理員可以在必要時關閉和重新啟動應用程式以安裝更新。 服務可以使用 Services指導方針中所述的指導方針。
重新啟動管理員會藉由傳送 lParam 參數設定為 ENDSESSION_CLOSEAPP (0x1) 的 WM_QUERYENDSESSION 通知,來查詢 GUI 應用程式以進行關機。 應用程式在收到 WM_QUERYENDSESSION 訊息時不應該關閉,因為另一個應用程式可能尚未準備好關閉。 如果應用程式準備關閉並重新啟動,GUI 應用程式應該接聽 WM_QUERYENDSESSION 訊息,並傳回 true 的值。 如果沒有任何應用程式傳回 FALSE 的值,則重新啟動管理員會傳送一則 WM_ENDSESSION 訊息,並將 lParam 參數設定為 ENDSESSION_CLOSEAPPENDSESSION_CLOSEAPP (0x1),並將 wparam 參數設定為 TRUE。 只有在應用程式收到 WM_ENDSESSION 訊息時,應用程式才應該關閉。 重新啟動管理員也會針對未在接收 WM_ENDSESSION時關閉的 GUI 應用程式傳送 WM_CLOSE 訊息。 如果任何 GUI 應用程式透過傳回 false 值來回應 WM_QUERYENDSESSION 訊息,則會取消關機。 不過,如果強制關機,則不論應用程式為何都會終止。
當 GUI 應用程式收到 WM_ENDSESSION 訊息時,應用程式應該準備在指定的逾時期間內關閉。 應用程式至少應該藉由儲存重新啟動後所需的任何用戶數據和狀態信息來準備。 建議應用程式定期儲存用戶數據和狀態。
重新啟動管理員會將 CTRL_C_EVENT 通知傳送至必須關閉並重新啟動的主控台應用程式。 當主控台應用程式收到 CTRL_C_EVENT 通知時,應用程式應該採取必要的動作,準備在指定的逾時期間內關閉。 控制台應用程式至少應該定義 HandlerRoutine 函式來處理 CTRL_C_EVENT 通知,並應儲存重新啟動後需要的任何使用者數據和狀態資訊。 建議應用程式定期儲存用戶數據和狀態。
如果有任何應用程式未關閉以回應關機訊息,安裝程式可以使用 RmShutdown 函式的 RmForceShutdown 選項來強制關閉應用程式。 當安裝程式指定強制關機時,重新啟動管理員會嘗試藉由傳送關機訊息來清除應用程式,但如果失敗,則會強制關閉應用程式。 GUI 應用程式和主控台應用程式可以強制關閉,以啟用重大安全性更新的安裝。 由於這可能會導致數據遺失,因此應用程式應該處理關機訊息,並在需要時完全關閉。
應用程式應該使用 RegisterApplicationRestart 函式來註冊重新啟動。 重新啟動管理員只能重新啟動已註冊重新啟動的應用程式。 這是重新啟動管理員判斷重新啟動應用程式時要使用的命令行命令的唯一方式。 如果應用程式必須以一些已儲存的狀態或數據重新開啟,該資訊必須包含在為應用程式註冊的命令行命令中。
注意
如果重新啟動的應用程式必須在它所執行的相同目錄中執行,才能關閉,應用程式必須儲存目錄資訊,然後在重新啟動之後變更至目錄。
注意
RmRestart 函式不會重新啟動未以目前登入使用者身分執行的應用程式。 例如,RmRestart 函式不會重新啟動以 執行身分 命令啟動的應用程式,但不會以目前登入的使用者身分執行。 這些應用程式必須手動重新啟動。
當 Restart Manager 判斷安裝更新需要系統重新啟動時,它不會關閉任何應用程式和服務。 相反地,它會將此專案留給安裝程式,以決定何時排程系統重新啟動並安裝更新。 安裝程式可以使用具有 EWX_RESTARTAPPS 旗標的 exitWindowsEx 函式,或使用具有 SHUTDOWN_RESTARTAPPS 旗標的 InitiateShutdown 函式,來減少需要重新啟動系統之更新所造成的中斷。 使用這些旗標可確保系統重新啟動之後,註冊重新啟動的應用程式會重新啟動,這可將對使用者的影響降到最低。