2016-12-01 3 views
-1

Mein Code:Absturz von ausführbarem Laufe Identifizieren von C# Process.Start()

ProcessInfo processInfo = ... 
Process proc = Process.Start(processInfo); 
proc.WaitForExit(); 
if (proc.ExitCode != 0) 
{ 
    // ... 
} 

Mein Problem ist, dass der Prozess (a C++ ausführbare) aufgrund nicht behandelte Ausnahmen einmal abstürzt, unter unbekannten Umständen.

Ich kann sagen, dass die ausführbare Datei abgestürzt ist, da beim Absturz einen negativen Exit-Code (oder nicht Null für diese Angelegenheit) zurückgibt. Ich kann jedoch keinen Prozess-Dump zur Untersuchung erstellen.

Wenn ich mindestens hatte Windows '"Programm funktioniert nicht mehr" Nachricht, dann konnte ich den Dump manuell erstellen.

Natürlich kann ich Software wie Debug Diag verwenden, um ausführbare Dateien zu überwachen und Dump auf Absturz zu nehmen, aber lieber eine generische Inhouse-Lösung haben.

Antwort

0

Ich denke, es ist wirklich an der ausführbaren Datei, die aufgerufen wird, um den Fehler auszugeben. Ob es an das Fenster ausgegeben wird oder einen Eintrag in die Ereignisanzeige stellt, hängt von der jeweiligen Anwendung ab. Sie sollten in der Lage sein, die Ausgabenachrichten zu lesen.

0

Haben Sie versucht, die stdErr-Ausgabe zusätzlich zu stdOut zu erfassen?

Zum Beispiel:

Process installProcess = new Process 
{ 
    StartInfo = 
    { 
     FileName = exeName, 
     Arguments = args, 
     CreateNoWindow = true, 
     UseShellExecute = false, 
     WindowStyle = ProcessWindowStyle.Hidden, 
     RedirectStandardOutput = true, 
     RedirectStandardError = true 
    } 
}; 

installProcess.Start(); 

string processStandardOutput = installProcess.StandardOutput.ReadToEnd(); 
string processStandardError = installProcess.StandardError.ReadToEnd(); 

// Check both strings for !IsNullOrEmpty and log something of interest 

installProcess.WaitForExit(); 
ExitCode = installProcess.ExitCode; 

// If ExitCode < 0, log the StandardError output...