Share via


應用程式的指導方針

在 Windows Vista 和 Windows Server 2008 上執行的應用程式應遵循這些指導方針,以確保重新開機管理員可以視需要關閉並重新啟動應用程式以安裝更新。 服務可以使用 服務指導方針中所述的指導方針。

  • 重新開機管理員會傳送lParam參數設定為ENDSESSION_CLOSEAPP (0x1) 的WM_QUERYENDSESSION通知,以查詢 GUI 應用程式以進行關機。 當應用程式收到 WM_QUERYENDSESSION 訊息時,應用程式不應該關閉,因為另一個應用程式可能尚未準備好關閉。 如果應用程式準備好關閉並重新啟動,GUI 應用程式應該接聽 WM_QUERYENDSESSION 訊息,並傳回 TRUE 的值。 如果沒有應用程式傳回 FALSE值,則重新開機管理員會傳送 WM_ENDSESSION 訊息,並將 lParam 參數設定為 ENDSESSION_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 函式不會重新開機以未以目前登入使用者身分執行之 執行身 分命令啟動的應用程式。 這些應用程式必須手動重新開機。

     

  • 當重新開機管理員判斷需要系統重新開機才能安裝更新時,它不會關閉任何應用程式和服務。 相反地,它會將此保留給安裝程式,以決定何時排程系統重新開機並安裝更新。 安裝程式可以透過使用ExitWindowsEx函式搭配EWX_RESTARTAPPS旗標或具有SHUTDOWN_RESTARTAPPS旗標的InitiateShutdown函式,減少需要重新開機系統之更新所造成的中斷。 使用這些旗標可確保在系統重新開機之後重新開機已註冊的應用程式會重新開機,這可降低對使用者的影響。