0

私はこのような.exeを起動しています

ProcessStartInfo start = new ProcessStartInfo();
start.Arguments = stuff;
start.FileName = "test.exe";
try{
    using (Process proc = Process.Start(start))
    {
            proc.WaitForExit();
    ...
    }
}
catch
{
...}

スレッドから。問題は、時々「test.exe」がクラッシュし、ポップアップ ウィンドウが開き、次のように表示されることです。

「アプリケーションが何とかクラッシュしました..インターネットで解決策を探しています」

「test.exe」がクラッシュすることが予想されますが、スレッドを解放するためにポップアップウィンドウを閉じるか、最初にexeクラッシュを「キャッチ」する必要があります。

コード内の try-catch は、クラッシュしている exe をキャッチしません。

助けていただけますか?ありがとうございました

4

2 に答える 2

2

私の知る限り、アプリケーションからこれを達成することはできません。これはシステムレベルの設定です。たとえば、Windows Vista で [アプリケーションをデバッグ/閉じる] ダイアログを無効にするにはどうすればよいですか? を参照してください。ダイアログを無効にする方法の詳細については、マシンごとに設定する必要があり、すべてのプログラムに影響することに注意してください。

于 2013-10-05T18:04:33.840 に答える
0

Windows Vista 以降では、Application Restart & Recoveryと呼ばれる機能が利用可能です。とりわけ、アプリケーションは、そのようなイベントで WER (Windows エラー報告) によって呼び出されるハンドラー プロシージャを登録できます。メソッドは特定のことを行うことができます。たとえば、スタック トレースを記述できます。これは、アプリケーションが応答を停止した場合 (AppHang) に役立つことがよくあります。

関数は適切に動作する必要があることに注意してください。つまり、何をするか、いつ行うか、何をしないかという特定の規則に従います。そうしないと、WER がこの回復スレッドを強制終了します。MSDN を調べることを強くお勧めします。

ところで、説明には正確なクラッシュ メッセージが欠けているため、その情報を追加する必要があります。「クラッシュ」と呼ばれるものには、いくつかの理由が考えられます。その情報がなければ、上記のコードを考えると、ちょっと推測です。

于 2013-10-05T23:22:21.563 に答える