VS2012,使用崩溃的系统函数调用exe

时间:2013-05-20 11:31:36

标签: c++ visual-studio

我正在使用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());

我从这个网站获得了额外的角色:

http://www.robvanderwoude.com/redirection.php

1 个答案:

答案 0 :(得分:2)

您需要修改其他进程的错误模式。如果您控制其他进程的代码,请调用SetErrorMode并将SEM_FAILCRITICALERRORS选项添加到错误模式。您应该在流程开始执行后立即进行此调用。

MSDN上的文档甚至讨论了您遇到的问题:

  

最佳做法是所有应用程序在启动时使用参数 SEM_FAILCRITICALERRORS 调用流程范围的 SetErrorMode 函数。这是为了防止错误模式对话框挂起应用程序。

如果您无法控制其他进程中的代码,则可以在进程中设置错误模式。这将产生预期的效果,因为子进程继承其父进程的错误模式。