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)
{
}
}