2

我正在使用 Visual Studio 2012。我正在使用系统函数来运行 exe。如果这个 exe 崩溃,它会弹出一个对话框,说程序需要关闭。但它会冻结调用程序,直到我关闭该框。调用程序是否有退出exe并继续的方法?它只需要适用于 Windows。

我这样打电话

int ret = system((prog + "> log.txt 2>&1").c_str());

额外的是将标准输出和错误输出到日志文件。

奇怪的是,如果我删除该部分,它会很好地返回控制权。

int ret = system((prog).c_str());

有任何想法吗??谢谢

编辑:好的,如果我这样做,它会返回控制权

int ret = system((prog + "> log.txt").c_str());

我从这个网站得到了额外的字符:

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

4

1 回答 1

1

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

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

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

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

于 2013-05-20T11:37:44.433 回答