共用方式為


SetErrorMode 函式 (errhandlingapi.h)

控制系統或進程是否處理指定的嚴重錯誤類型。

語法

UINT SetErrorMode(
  [in] UINT uMode
);

參數

[in] uMode

進程錯誤模式。 此參數可以是下列其中一或多個值。

價值 意義
0
使用系統預設值,顯示所有錯誤對話方塊。
SEM_FAILCRITICALERRORS
0x0001
系統不會顯示critical-error-handler消息框。 相反地,系統會將錯誤傳送至呼叫進程。

最佳做法是所有應用程式都會在啟動時使用參數呼叫全進程 SetErrorModeSEM_FAILCRITICALERRORS 函式。 這是為了避免錯誤模式對話框停止應用程式。

SEM_NOALIGNMENTFAULTEXCEPT
0x0004
系統會自動修正記憶體對齊錯誤,並讓應用程式看不到它們。 它會針對呼叫進程和任何子代進程執行此作業。 此功能僅受特定處理器架構支援。 如需詳細資訊,請參閱一節。

為進程設定此值之後,會忽略後續清除值的嘗試。

SEM_NOGPFAULTERRORBOX
0x0002
系統不會叫用 Windows 錯誤報告。 若要停用 Windows 錯誤報告 UI,請使用 WER_FAULT_REPORTING_NO_UI 旗標呼叫 WerSetFlags。
SEM_NOOPENFILEERRORBOX
0x8000
OpenFile 函式在找不到檔案時不會顯示消息框。 相反地,錯誤會傳回給呼叫端。 此錯誤模式會覆寫 OF_PROMPT 旗標。

傳回值

傳回值是錯誤模式位旗標的先前狀態。

言論

每個進程都有相關聯的錯誤模式,會向系統指出應用程式如何回應嚴重錯誤。 子進程會繼承其父進程的錯誤模式。 若要擷取進程錯誤模式,請使用 GetErrorMode 函式。

由於錯誤模式已針對整個進程設定,因此您必須確定多線程應用程式不會設定不同的錯誤模式旗標。 這樣做可能會導致錯誤處理不一致。

系統不會讓所有處理器架構上的應用程式看到對齊錯誤。 因此,在這類架構上指定SEM_NOALIGNMENTFAULTEXCEPT不是錯誤,但系統可以無訊息地忽略要求。 這表示下列程式代碼序列在 x86 電腦上不一定有效:

C++
SetErrorMode(SEM_NOALIGNMENTFAULTEXCEPT); 
fuOldErrorMode = SetErrorMode(0); 
ASSERT(fuOldErrorMode == SEM_NOALIGNMENTFAULTEXCEPT);
Itanium:應用程式必須明確地呼叫 setErrorMode 搭配 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

另請參閱

錯誤處理函式

錯誤模式

GetErrorMode

SetThreadErrorMode