当exe文件无效时,CreateProcess会等待

时间:2015-11-19 11:19:13

标签: c++ windows winapi createprocess

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

1 个答案:

答案 0 :(得分:6)

您需要通过调用SetErrorMode来更改流程的错误处理政策。您应该在程序的最开始,启动期间执行此操作。

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

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

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

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