CreateProcess 在 exe 文件无效时等待

CreateProcess waits when exe file is invalid

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

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

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

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

请注意,至少在 Windows 的旧版本中,没有简单获取当前错误模式的功能。 GetErrorMode function was added in Vista. So instead we call SetErrorMode(0) which returns the previous error mode. This somewhat inconvenient API design is discussed in Raymond Chen's article here: Disabling the program crash dialog。当然,如果你不再支持XP,你可以使用:

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