Wie eine nicht verwaltete App zu erkennen, wird abgebrochen
-
20-08-2019 - |
Frage
Ich habe eine C # -Anwendung, die eine nicht verwaltete C ++ Applikation über Process.Start ()
ruftAuf einigen Maschinen wenn diese C ++ app bricht, ich bin links mit dem Just-In-Time-Fehlerdialog zeigt
Gibt es eine Möglichkeit von C # zu erkennen, dass die C ++ App errored hat und es nur neu starten
(ich habe nicht die Quelle und daher nicht den App ++ C ändern kann)
Lösung
Der JIT-Debugger-Dialog zeigt, weil die C ++ app in irgendeiner Weise abgestürzt. Während der Dialog geöffnet ist, wird der Prozess noch vorhanden ist (aber suspendiert), was bedeutet, dass der Prozess-Klasse wird es nicht berücksichtigen müssen „verlassen“, bis der JIT Dialog abgewiesen oder ein angeschlossenes Debugger endet der Prozess.
Sie können entweder deaktivieren JIT-Debuggen auf den Maschinen das Problem auftritt (I denken , dass die Debug-Manager-Dienst zu deaktivieren JIT-Debuggen deaktivieren kann), die App ermöglicht abstürzen und sterben (und damit Bericht als „verlassen“), oder (und ich habe keine Ahnung, wie man über das tun dies gehen würde) sehen, wenn Sie Ihren Host C # app befestigen sich als Debugger für die C ++ app machen können und die Benachrichtigung des Absturzes vom C erhalten ++ app, beenden, und dann wirken sich auf die Informationen, die sie beendet ist.
Andere Tipps
Wenn die C ++ ist eine Konsole Sie zwei Dinge überprüfen,
-
Der Exit-Wert, häufig 0 bedeutet normalerweise geschlossen sonst ist Problem (aber ich denke, das hängt von der Konvention dieser Anwendungen entwickeln verwendet)
-
Der Standardfehler Überprüfen Sie, ob es leer ist, so ist alles in Ordnung,
mit (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) { } }