c++ - CreateProcess 在 exe 文件无效时等待

标签 c++ windows winapi createprocess

我想制作一个简单的 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/

相关文章:

java - 加载 Java VM 时出现 Windows 错误 2

c++ - Windows——在子进程中继承控制台文件句柄

阅读额外字符的并发症

c++ - 选择监听套接字总是成功

windows - 在 Windows 10 通用应用程序上添加 Youtube 嵌入视频

ruby-on-rails - Windows 上的 thin rails server/eventmachine 不适用于自定义证书

c++ - 为 Windows 内置拼写检查提供程序添加拼写检查语言

c++ - 序列化 variables_map

c++ - 调用常量指向成员函数的指针未被内联

c++ - 计算范围内的值时出现舍入误差