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 に答える