我正在使用Visual Studio 2012.我正在使用系统函数来运行exe。如果此exe崩溃,它会弹出对话框,说明程序需要关闭。但它冻结了调用程序,直到我关闭框。无论如何,调用程序是否退出exe并继续?它只需要适用于Windows。
我这样打电话
int ret = system((prog + "> log.txt 2>&1").c_str());
额外的是输出std out和err到日志文件。
扼杀,如果我删除那个部分,它就会很好地恢复控制。
int ret = system((prog).c_str());
任何想法? 感谢
编辑: 好的,如果我这样做,它会返回控件
int ret = system((prog + "> log.txt").c_str());
我从这个网站获得了额外的角色:
答案 0 :(得分:2)
您需要修改其他进程的错误模式。如果您控制其他进程的代码,请调用SetErrorMode
并将SEM_FAILCRITICALERRORS
选项添加到错误模式。您应该在流程开始执行后立即进行此调用。
MSDN上的文档甚至讨论了您遇到的问题:
最佳做法是所有应用程序在启动时使用参数 SEM_FAILCRITICALERRORS 调用流程范围的 SetErrorMode 函数。这是为了防止错误模式对话框挂起应用程序。
如果您无法控制其他进程中的代码,则可以在进程中设置错误模式。这将产生预期的效果,因为子进程继承其父进程的错误模式。