InitiateSystemShutdownA 函式 (winreg.h)
起始指定電腦的關機和選擇性重新啟動。
若要記錄事件記錄檔中關機的原因,請呼叫 InitiateSystemShutdownEx 函式。
語法
BOOL InitiateSystemShutdownA(
[in, optional] LPSTR lpMachineName,
[in, optional] LPSTR lpMessage,
[in] DWORD dwTimeout,
[in] BOOL bForceAppsClosed,
[in] BOOL bRebootAfterShutdown
);
參數
[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 不是零,InitiateSystemShutdown 在指定的計算機上顯示對話框。 對話框會顯示呼叫函式的使用者名稱、顯示由 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,系統會將所有快取排清到磁碟,並安全地關閉系統。
傳回值
如果函式成功,則傳回值為非零值。
如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
言論
若要關閉本機計算機,呼叫線程必須具有 SE_SHUTDOWN_NAME 許可權。 若要關閉遠端計算機,呼叫端線程必須在遠端電腦上具有 SE_REMOTE_SHUTDOWN_NAME 許可權。 根據預設,用戶可以在登入的計算機上啟用 SE_SHUTDOWN_NAME 許可權,而系統管理員可以在遠端電腦上啟用 SE_REMOTE_SHUTDOWN_NAME 許可權。 如需詳細資訊,請參閱 以特殊許可權執行。
失敗的常見原因包括無效或無法存取的計算機名稱或許可權不足。 如果指定的計算機上已在進行關機,則會傳回錯誤 ERROR_SHUTDOWN_IN_PROGRESS。 如果啟用快速使用者切換,但未登入使用者,則可以傳回錯誤 ERROR_NOT_READY。
非零的傳回值並不表示已註銷或將會成功。 關機是異步進程,而且在 API 呼叫傳回或完全不傳回之後,可能會發生。 即使逾時值為零,仍可由應用程式、服務或甚至系統中止關機。 非零傳回值表示許可權和參數的驗證成功,且系統已接受關機要求。
呼叫此函式時,呼叫端必須指定是否應強制關閉具有未儲存變更的應用程式。 如果呼叫端選擇不強制關閉這些應用程式,且控制台會話上正在執行未儲存變更的應用程式,則在使用者登入控制台會話中止關機、儲存變更、關閉應用程式或強制關閉應用程式之前,關機將會持續進行中。 在此期間,除了控制台使用者以外,可能不會中止關機,而且可能不會起始另一個關機。
請注意,呼叫此函式 ,並將 bForceAppsClosed 參數的值設定為 TRUE 可避免這種情況。 請記住,這樣做可能會導致數據遺失。
Windows Server 2003 和 Windows XP:如果電腦已鎖定,且 bForceAppsClosed 參數 FALSE,則最後一個錯誤碼會 ERROR_MACHINE_LOCKED。 如果系統尚未準備好處理要求,則最後一個錯誤碼會 ERROR_NOT_READY。 應用程式應該稍候一段時間,然後重試呼叫。 例如,系統可能無法讀取以起始關機,並傳回 ERROR_NOT_READY,如果關機要求同時使用者嘗試登入系統。 在此情況下,應用程式應該稍候一段時間,然後重試呼叫。
例子
如需範例,請參閱 顯示關機對話框。
注意
winreg.h 標頭會將 InitiateSystemShutdown 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | winreg.h (包括 Windows.h) |
連結庫 | Advapi32.lib |
DLL | Advapi32.dll |