共用方式為


RmShutdown 函式 (restartmanager.h)

起始應用程式的關機。 此函式只能從使用 RmStartSession 函式 啟動重新啟動管理員會話的安裝程式呼叫。

語法

DWORD RmShutdown(
  [in]           DWORD                    dwSessionHandle,
  [in]           ULONG                    lActionFlags,
  [in, optional] RM_WRITE_STATUS_CALLBACK fnStatus
);

參數

[in] dwSessionHandle

現有重新啟動管理員會話的句柄。

[in] lActionFlags

設定元件關閉的一或多個 RM_SHUTDOWN_TYPE 選項。 下列值可由 OR 運算子結合,以指定當所有應用程式都已註冊重新啟動時,才會強制關閉沒有回應的應用程式和服務。

意義
RmForceShutdown
0x1
強制無回應的應用程式和服務在逾時期間之後關閉。 未回應關機要求的應用程式會在 30 秒內強制關閉。 未回應關機要求的服務會在 20 秒後強制關閉。
RmShutdownOnlyRegistered
0x10
只有在所有應用程式都已註冊以使用 RegisterApplicationRestart 函式重新啟動時,才關閉應用程式。 如果無法重新啟動任何進程或服務,則不會關閉任何進程或服務。

[in, optional] fnStatus

執行此函式時,用來傳達詳細狀態 的RM_WRITE_STATUS_CALLBACK 函式指標。 如果 為 NULL,則不會提供任何狀態。

傳回值

這是最近收到的錯誤。 函式可以傳回 Winerror.h 中定義的其中一個 系統錯誤碼

意義
ERROR_SUCCESS
0
所有關機、重新啟動和回呼作業都已成功完成。
ERROR_FAIL_NOACTION_REBOOT
350
未執行關機動作。 一或多個進程或服務需要重新啟動系統才能關閉。 當重新啟動管理員偵測到關閉任何應用程式之前,需要重新啟動系統時,就會傳回此錯誤碼。
ERROR_FAIL_SHUTDOWN
351
某些應用程式無法關閉。 RmGetList 函式所傳回之RM_PROCESS_INFO結構的 AppStatus 包含更新的狀態資訊。
ERROR_CANCELLED
1223
當取消作業的要求成功時, RmShutdown 函式會傳回此錯誤值。
ERROR_SEM_TIMEOUT
121
重新啟動管理員函式無法在分配的時間內取得登錄寫入 Mutex。 建議重新啟動系統,因為進一步使用重新啟動管理員可能會失敗。
ERROR_BAD_ARGUMENTS
160
一或多個自變數不正確。 如果 NULL 指標或 0 傳入需要非 Null 和非零值的參數,則 Restart Manager 函式會傳回這個錯誤值。
ERROR_WRITE_FAULT
29
作業無法讀取或寫入登錄。
ERROR_OUTOFMEMORY
14
無法完成重新啟動管理員作業,因為沒有足夠的記憶體可用。
ERROR_INVALID_HANDLE
6
提供的句柄沒有重新啟動管理員會話。

備註

RmShutdown 函式會呼叫 RmGetList,並在嘗試關閉任何進程之前,先更新目前使用已註冊資源的進程清單。 RmShutdown 函式接著會嘗試使用目前清單中已註冊的資源來關閉進程。 RmShutdown 函式會更新 RmGetList 函式所傳回之RM_PROCESS_INFO結構的 AppStatus 成員,其中包含詳細的狀態資訊。

重新啟動管理員會遵守分隔不同使用者或終端機會話的許可權。 以 LocalSystem 許可權作為服務執行的安裝程式無法關閉或重新啟動其他使用者或終端機會話中的任何應用程式。 安裝程式應該實作自定義方法,以關閉並重新啟動在其他會話中執行的應用程式。 其中一種方法是在另一個會話中啟動新的安裝程式程式,以執行關機和重新啟動作業。

即使 RmShutdown 函式傳回錯誤,安裝程式應該一律使用 RmRestart 函式重新啟動應用程式和服務,指出並非所有應用程式和服務都可以關閉。

規格需求

需求
最低支援的用戶端 Windows Vista [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 [僅限傳統型應用程式]
目標平台 Windows
標頭 restartmanager.h
程式庫 Rstrtmgr.lib
Dll Rstrtmgr.dll

另請參閱

RegisterApplicationRestart

RmCancelCurrentTask

RmRestart