1

Process.Start() を介してアンマネージド C++ アプリケーションを呼び出す C# アプリがあります。

一部のマシンでは、この C++ アプリが異常終了すると、Just-In-Time エラー ダイアログが表示されたままになります。

C++アプリにエラーが発生したことをC#から検出して再起動する方法はありますか

(ソースがないため、C++ アプリを変更できません)

4

2 に答える 2

1

C ++アプリが何らかの方法でクラッシュしたため、JITデバッガダイアログが表示されています。ダイアログが開いている間、プロセスはまだ存在しています(ただし中断されています)。つまり、JITダイアログが閉じられるか、接続されたデバッガーがプロセスを終了するまで、Processクラスはプロセスが「終了」したとは見なしません。

問題が発生しているマシンでJITデバッグを無効にする( Machine Debug Managerサービスを無効にするとJITデバッグが無効になる可能性があると思います)か、アプリがクラッシュして終了する(したがって、「終了」として報告される)か、または(およびこれをどのように行うかわかりません)ホストC#アプリをC ++アプリのデバッガーとしてアタッチし、C ++アプリからクラッシュの通知を受信して​​終了し、それに基づいて動作できるかどうかを確認します終了した情報。

于 2009-06-26T12:18:17.100 に答える
0

C ++がコンソールベースの場合、2つのことを確認できます。

  1. 出口コード(通常は0)は、通常は閉じていることを意味します。それ以外の場合は問題があります(ただし、これは、このアプリケーションの開発に使用される規則によって異なると思います)

  2. 標準エラーが空の場合はチェックして、すべて問題がないことを確認します

    using(Process p = new Process()){

     p.StartInfo.UseShellExecute = false;
     p.StartInfo.RedirectStandardError = true;
     p.StartInfo.FileName = "any.exe";
     p.Start();
     string error = p.StandardError.ReadToEnd();
     p.WaitForExit()
     if(error.Length == 0 && p.ExitCode == 0)
     {
     }
    }
    
于 2009-06-26T12:15:23.283 に答える