Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ VS2012,使用系统函数调用exe时崩溃_C++_Visual Studio - Fatal编程技术网

C++ VS2012,使用系统函数调用exe时崩溃

C++ VS2012,使用系统函数调用exe时崩溃,c++,visual-studio,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 =

我正在使用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());
我从这个网站上获得了额外的字符:


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

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

最佳实践是,所有应用程序在启动时调用进程范围的SetErrorMode函数,参数为SEM\u FAILCRITICALERRORS。这是为了防止错误模式对话框挂起应用程序


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

当进程尚未退出时,您希望
ret
是什么?如果它崩溃,ret可以是0以外的任何值。我只是检查非0,写在一个错误日志中。但这就是我想说的一点:它还没有崩溃,直到用户点击“关闭”。在这个对话框中,您仍然可以将调试器附加到进程,修复任何错误,并让它继续并成功完成。