SetErrorMode 函数(errhandlingapi.h)

控制系统还是进程处理指定的严重错误类型。

语法

UINT SetErrorMode(
  [in] UINT uMode
);

参数

[in] uMode

进程错误模式。 此参数可以是以下一个或多个值。

价值 意义
0
使用系统默认值,它显示所有错误对话框。
SEM_FAILCRITICALERRORS
0x0001
系统不显示关键错误处理程序消息框。 相反,系统将错误发送到调用进程。

最佳做法是,所有应用程序都使用启动时 SEM_FAILCRITICALERRORS 参数调用进程范围的 SetErrorMode 函数。 这是为了防止错误模式对话框挂起应用程序。

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:应用程序必须使用 SEM_NOALIGNMENTFAULTEXCEPT 显式调用 setErrorMode,以便系统自动修复对齐错误。 默认设置是让系统对应用程序可见对齐错误。

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