SetErrorMode 函式 (errhandlingapi.h)
控制系統或進程是否處理指定的嚴重錯誤類型。
語法
UINT SetErrorMode(
[in] UINT uMode
);
參數
[in] uMode
進程錯誤模式。 此參數可以是下列其中一或多個值。
價值 | 意義 |
---|---|
|
使用系統預設值,顯示所有錯誤對話方塊。 |
|
系統不會顯示critical-error-handler消息框。 相反地,系統會將錯誤傳送至呼叫進程。
最佳做法是所有應用程式都會在啟動時使用參數呼叫全進程 SetErrorModeSEM_FAILCRITICALERRORS 函式。 這是為了避免錯誤模式對話框停止應用程式。 |
|
系統會自動修正記憶體對齊錯誤,並讓應用程式看不到它們。 它會針對呼叫進程和任何子代進程執行此作業。 此功能僅受特定處理器架構支援。 如需詳細資訊,請參閱一節。
為進程設定此值之後,會忽略後續清除值的嘗試。 |
|
系統不會叫用 Windows 錯誤報告。 若要停用 Windows 錯誤報告 UI,請使用 WER_FAULT_REPORTING_NO_UI 旗標呼叫 WerSetFlags。 |
|
OpenFile 函式在找不到檔案時不會顯示消息框。 相反地,錯誤會傳回給呼叫端。 此錯誤模式會覆寫 OF_PROMPT 旗標。 |
傳回值
傳回值是錯誤模式位旗標的先前狀態。
言論
每個進程都有相關聯的錯誤模式,會向系統指出應用程式如何回應嚴重錯誤。 子進程會繼承其父進程的錯誤模式。 若要擷取進程錯誤模式,請使用 GetErrorMode 函式。
由於錯誤模式已針對整個進程設定,因此您必須確定多線程應用程式不會設定不同的錯誤模式旗標。 這樣做可能會導致錯誤處理不一致。
系統不會讓所有處理器架構上的應用程式看到對齊錯誤。 因此,在這類架構上指定SEM_NOALIGNMENTFAULTEXCEPT不是錯誤,但系統可以無訊息地忽略要求。 這表示下列程式代碼序列在 x86 電腦上不一定有效:
C++ |
---|
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); fuOldErrorMode = SetErrorMode(0); ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT); |
Visual Studio 2005:宣告可能未對齊數據之結構的指標時,您可以使用 __unaligned 關鍵詞來指出類型一次必須讀取一個字節。 如需詳細資訊,請參閱 Windows 資料對齊。
Windows 7:來電者應該偏好 SetThreadErrorModeSetErrorMode,因為它對系統的正常行為較不干擾。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows Server 2003 [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | errhandlingapi.h (包括 Windows.h) |
連結庫 | Kernel32.lib |
DLL | Kernel32.dll |