我想制作一个简单的 C++ 程序,使用 CreateProcess 一次运行多个 exe 文件.如果 exe 文件无效(填充有随机数据),则会出现一个消息框,提示该文件与 64 位 Windows 不兼容,这很好,但我的程序会一直等到消息框关闭。有办法绕过这个吗?
最佳答案
您需要通过调用 SetErrorMode
更改流程的错误处理策略。 .您应该在程序的最开始,即启动期间执行此操作。
SetErrorMode(SetErrorMode(0) | SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS
| SEM_NOOPENFILEERRORBOX);
我相信 SEM_FAILCRITICALERRORS
是与您当前问题相关的标志,但您也应该包括其他标志。
请注意,至少在旧版本的 Windows 中,没有简单获取当前错误模式的函数。 GetErrorMode
功能是在 Vista 中添加的。因此,我们改为调用 SetErrorMode(0)
,它返回先前的错误模式。这种有点不方便的 API 设计在 Raymond Chen 的文章中有所讨论:Disabling the program crash dialog .当然,如果你不再支持XP,你可以使用:
SetErrorMode(GetErrorMode() | SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS
| SEM_NOOPENFILEERRORBOX);
关于c++ - CreateProcess 在 exe 文件无效时等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33802440/