我想制作一个简单的C ++程序,使用CreateProcess一次运行多个exe文件。如果exe文件无效(填充了随机数据),则会出现一个消息框,提示该文件与64位Windows不兼容,这很好,但是我的程序要等到消息框关闭后才可以。有没有办法绕过这个?

最佳答案

您需要通过调用SetErrorMode更改流程的错误处理策略。您应该在程序启动时执行此操作。

SetErrorMode(SetErrorMode(0) | SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS
  | SEM_NOOPENFILEERRORBOX);


我相信SEM_FAILCRITICALERRORS是与您当前问题相关的标志,但是您也应该包括其他标志。

请注意,至少在较旧的Windows版本中,没有任何功能可以简单地获取当前的错误模式。 GetErrorMode功能已在Vista中添加。因此,我们调用SetErrorMode(0)返回前一个错误模式。 Raymond Chen的文章Disabling the program crash dialog中讨论了这种有点不方便的API设计。当然,如果您不再支持XP,则可以使用:

SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS
  | SEM_NOOPENFILEERRORBOX);

08-24 19:03