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

CreateProcess waits when exe file is invalid

本文关键字:CreateProcess 等待 exe 文件 无效      更新时间:2023-10-16

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

您需要通过调用SetErrorMode来更改流程的错误处理策略。您应该在程序刚开始的时候,在启动过程中这样做。

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

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

请注意,至少在旧版本的Windows中,没有简单获取当前错误模式的功能。在Vista中添加了GetErrorMode功能。因此,我们调用SetErrorMode(0),它返回以前的错误模式。Raymond Chen的文章中讨论了这种有点不方便的API设计:禁用程序崩溃对话框。当然,如果你不再支持XP,你可以使用:

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