Wenn ein .net-Programm, bevor die Einstellung des Exit-Code explizit gesetzt fehlschlägt (von Environment.Exit()
/Appliation.Current.Shutdown()
/... Aufruf), was die für diesen Prozess Exit-Code ist?Welche Exit-Codes kann ein .net-Programm haben, wenn Environment.Exit() nicht verwendet wird?
Gibt es eine normale Beendigung führen immer in Exit-Code Null, und was sind die anderen möglichen Fälle?
Nach this answer auf die damit verbundene Frage Getting ExitCode From Exception Handler von Hans Passant: „, wenn ein Programm auf einer Ausnahme stirbt dann ist der Exit-Code normalerweise gleich den Code zugrunde liegenden Ausnahmefehlers“.
So eine uncaugth Ausnahme kann den Exit-Code cange. Ist dies immer der Fall, und ist die zugrunde liegende Ausnahme Fehlercode immer garantiert von Null, und in einem bestimmten Bereich zu sein?
Gibt es andere Umstände, unter denen das .NET-Framework oder Windows automatisch einen anderen Exit-Code festlegen kann, z. B. einen nicht-exemplarischen Absturz (ist das möglich?) Oder einen erzwungenen Task kill?
Um es anders auszudrücken, könnte ich durch den Exit-Code feststellen, ob das Programm in irgendeiner abnormalen Weise beendet wurde oder nicht?
Oder wenn ein Exit-Code von Null in einigen abnormalen Fällen auch auftreten kann, könnte ich eine Environment.Exit(somevalue)
in alle normalen Beendigungspfade für ein Programm einschließen, und sicher sein, dass dieser Exit-Code im Falle eines Absturzes nie auftreten kann?
Motivation:
Seit not all exeptions are catchable ohne schwere Abhilfen, und da gibt es andere Ursachen für andere plötzliche Beendigung des Programms sein kann als abgefangene excpetions, um sicherzustellen, dass alle Codepfade rufen Environment.Exit() ist nicht alwas möglich. Deshalb bin ich daran interessiert festzustellen, ob der Exit-Code verwendet werden kann, um zuverlässig zu erkennen, ob ein Programm normal beendet wurde.
Ich fügte die Unterschiede zwischen meiner Frage und dem vorgeschlagenen Duplikat hinzu. Während die zweite Antwort auch bei einem Teil meiner Frage hilft, beantwortet sie sie nicht vollständig, und die Frage selbst ist völlig anders. – HugoRune
Tangentialer Vorschlag: Aktivieren Sie die Windows-Fehlerberichterstattung mit der Option zum Erstellen von Minidumps. Auf diese Weise haben Sie nicht nur einen Exit-Code, sondern auch die Exception-Records und Partial-Stacks, die Sie durch einen Debugger führen können. (Wie WinDBG mit dem SOS-Debugger.) Auch ohne Minidumps WER fängt einige Informationen über die Fehlermeldung selbst. Für eine interne Anwendung können Sie sogar einen Server für die automatische Übermittlung der Absturzberichte einrichten. Diese [Seite] (https://technet.microsoft.com/en-us/library/cc709644.aspx) auf TechNet hat einen guten Überblick. – theB
Der Exit-Code ist ziemlich nutzlos IMHO. Mehr hier: http://stackoverflow.com/questions/4344923/process-exit-code-when-process-is-killed-forcibly –