Process.Start() を介してアンマネージド C++ アプリケーションを呼び出す C# アプリがあります。
一部のマシンでは、この C++ アプリが異常終了すると、Just-In-Time エラー ダイアログが表示されたままになります。
C++アプリにエラーが発生したことをC#から検出して再起動する方法はありますか
(ソースがないため、C++ アプリを変更できません)
Process.Start() を介してアンマネージド C++ アプリケーションを呼び出す C# アプリがあります。
一部のマシンでは、この C++ アプリが異常終了すると、Just-In-Time エラー ダイアログが表示されたままになります。
C++アプリにエラーが発生したことをC#から検出して再起動する方法はありますか
(ソースがないため、C++ アプリを変更できません)
C ++アプリが何らかの方法でクラッシュしたため、JITデバッガダイアログが表示されています。ダイアログが開いている間、プロセスはまだ存在しています(ただし中断されています)。つまり、JITダイアログが閉じられるか、接続されたデバッガーがプロセスを終了するまで、Processクラスはプロセスが「終了」したとは見なしません。
問題が発生しているマシンでJITデバッグを無効にする( Machine Debug Managerサービスを無効にするとJITデバッグが無効になる可能性があると思います)か、アプリがクラッシュして終了する(したがって、「終了」として報告される)か、または(およびこれをどのように行うかわかりません)ホストC#アプリをC ++アプリのデバッガーとしてアタッチし、C ++アプリからクラッシュの通知を受信して終了し、それに基づいて動作できるかどうかを確認します終了した情報。
C ++がコンソールベースの場合、2つのことを確認できます。
出口コード(通常は0)は、通常は閉じていることを意味します。それ以外の場合は問題があります(ただし、これは、このアプリケーションの開発に使用される規則によって異なると思います)
標準エラーが空の場合はチェックして、すべて問題がないことを確認します
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)
 {
 }
}