Share via


InitiateSystemShutdownExA 函式 (winreg.h)

起始指定計算機的關機和選擇性重新啟動,並選擇性地記錄關機的原因。

語法

BOOL InitiateSystemShutdownExA(
  [in, optional] LPSTR lpMachineName,
  [in, optional] LPSTR lpMessage,
  [in]           DWORD dwTimeout,
  [in]           BOOL  bForceAppsClosed,
  [in]           BOOL  bRebootAfterShutdown,
  [in]           DWORD dwReason
);

參數

[in, optional] lpMachineName

要關閉的電腦網路名稱。 如果 lpMachineNameNULL 或空字串,則函式會關閉本機電腦。

[in, optional] lpMessage

要顯示在 [關機] 對話框中的訊息。 如果不需要任何訊息,此參數可以是 NULL

Windows Server 2003 和 Windows XP: 此字串也會儲存為事件記錄檔專案中的批註。

Windows Server 2003 和 Windows XP SP1: 字串限制為 3072 TCHAR

[in] dwTimeout

應該以秒為單位顯示關機對話框的時間長度。 顯示此對話框時, AbortSystemShutdown 函式可以停止關機。

如果 dwTimeout 不是零, 則 InitiateSystemShutdownEx 會在指定的電腦上顯示對話方塊。 對話框會顯示呼叫函式的使用者名稱、顯示 lpMessage 參數所指定的訊息,並提示使用者註銷。 建立對話框並保留在系統中的其他視窗上方時,就會發生擷取。 對話框可以移動,但無法關閉。 定時器會倒數關閉之前的剩餘時間。

如果 dwTimeout 為零,則計算機會關閉而不顯示對話框,而且 AbortSystemShutdown 無法停止關機。

Windows Server 2003 和 Windows XP SP1: 逾時值限製為MAX_SHUTDOWN_TIMEOUT秒。

Windows Server 2003 和 Windows XP SP1: 如果要關閉的電腦是終端機服務伺服器,系統會向所有本機和遠端使用者顯示對話框,警告他們已起始關機。 對話框包含要求關機的人員、顯示訊息 (會看到 lpMessage) ,以及伺服器關閉之前有多少時間。

[in] bForceAppsClosed

如果此參數為 TRUE,則具有未儲存變更的應用程式會強制關閉。 如果此參數為 FALSE,系統會顯示對話框,指示使用者關閉應用程式。

[in] bRebootAfterShutdown

如果此參數為 TRUE,計算機會在關閉之後立即重新啟動。 如果此參數為 FALSE,系統會將所有快取排清到磁碟,並安全地關閉系統。

[in] dwReason

起始關機的原因。 此參數必須是其中一個 系統關機原因碼

如果此參數為零,則預設值為未定義的關機,記錄為「找不到此原因的標題」。 根據預設,它也是非計劃性關機。 視系統設定方式而定,非計劃性關機會觸發建立包含系統狀態信息的檔案,這可能會延遲關機。 因此,請勿對此參數使用零。

Windowsxp: 系統狀態資訊不會在非計劃性系統關機期間儲存。 上述文字不適用。

傳回值

如果函式成功,則傳回非零的值。

如果此函式失敗,則傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

備註

若要關閉本機計算機,呼叫線程必須具有SE_SHUTDOWN_NAME許可權。 若要關閉遠端計算機,呼叫線程必須在遠端電腦上具有SE_REMOTE_SHUTDOWN_NAME許可權。 根據預設,用戶可以在登入的計算機上啟用SE_SHUTDOWN_NAME許可權,而系統管理員可以在遠端電腦上啟用SE_REMOTE_SHUTDOWN_NAME許可權。 如需詳細資訊,請參閱 使用特殊許可權執行

失敗的常見原因包括無效或無法存取的計算機名稱或許可權不足。 如果指定的計算機上已經進行關機,就會傳回錯誤ERROR_SHUTDOWN_IN_PROGRESS。 如果已啟用快速使用者切換,但未登入使用者,則可以傳回錯誤ERROR_NOT_READY。

非零的傳回值不表示註銷是或將會成功。 關機是異步進程,而且在 API 呼叫傳回或完全不傳回之後可能會發生。 即使逾時值為零,關機仍可由應用程式、服務或甚至系統中止。 非零的傳回值表示許可權和參數的驗證成功,而且系統接受關機要求。

呼叫此函式時,呼叫端必須指定是否應該強制關閉具有未儲存變更的應用程式。 如果呼叫端選擇不要強制關閉這些應用程式,且具有未儲存變更的應用程式正在控制台會話上執行,則在使用者登入控制台會話中止關機、儲存變更、關閉應用程式或強制應用程式關閉之前,關機會保持進行中。 在此期間,除了控制台使用者之外,可能不會中止關機,而且可能不會起始另一個關機。

請注意,使用設定為 TRUEbForceAppsClosed 參數值呼叫此函式,可避免這種情況。 請記住,這樣做可能會導致數據遺失。

Windows Server 2003 和 Windows XP: 如果計算機已鎖定,且 bForceAppsClosed 參數為 FALSE,則最後一個錯誤碼會ERROR_MACHINE_LOCKED。 如果系統尚未準備好處理要求,則會ERROR_NOT_READY最後一個錯誤碼。 應用程式應該會稍候一段時間,然後重試呼叫。 例如,如果關閉要求同時用戶嘗試登入系統,系統可能會無法讀取以起始關機,並傳回ERROR_NOT_READY。 在此情況下,應用程式應該會稍候一段時間,然後重試呼叫。

注意

winreg.h 標頭會根據 UNICODE 預處理器常數的定義,將 InitiateSystemShutdownEx 定義為別名,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱 函式原型的慣例

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 winreg.h (包括 Windows.h)
程式庫 Advapi32.lib
Dll Advapi32.dll

另請參閱

AbortSystemShutdown

關閉

系統關機函式