Im Zusammenhang mit this question möchte ich CLR erzwingen, dass meine .NET 4.5.2-Anwendung beschädigte Statusausnahmen abruft, nur um sie zu protokollieren und dann die Anwendung zu beenden. Was ist der richtige Weg, dies zu tun, wenn ich catch (Exception ex)
an mehreren Stellen in der App habe?Korrekte Behandlung von Ausnahmefehlern des beschädigten Zustands
Also, nachdem ich das <legacyCorruptedStateExceptionsPolicy>
Attribut angegeben habe, wenn ich richtig verstanden habe, werden alle catch (Exception ex)
Handler Ausnahmen wie AccessViolationException
fangen und glücklich weiter.
Ja, ich weiß, catch (Exception ex)
ist eine schlechte Idee ™, aber wenn CLR würde mindestens die richtige Stack-Trace in das Ereignisprotokoll, wäre ich mehr als glücklich, dem Kunden zu erklären, dass seine Server App schnell um 1 Uhr morgens und offline für die Nacht zu sein ist eine gute Sache. Aber unglücklicherweise zeichnet CLR eine unrelated exception im Ereignisprotokoll auf und schließt dann den Prozess, so dass ich nicht herausfinden kann, was tatsächlich passiert ist.
Die Frage ist, wie man damit dies geschieht, Prozess breit:
if the exception thrown is a Corrupted State Exception:
- write the message to the log file
- end the process
(Update)
Mit anderen Worten, dies ist wahrscheinlich für die meisten Ausnahmen in einer einfachen App funktionieren würde:
[HandleProcessCorruptedStateExceptions]
[SecurityCritical]
static void Main() // main entry point
{
try
{
}
catch (Exception ex)
{
// this will catch CSEs
}
}
Aber, wird es nicht für Arbeit:
- Unbehandelte Anwendungsdomänenausnahmen (d. H. geworfen auf nicht-Vordergrund-Threads)
- Windows Service-Anwendungen (den don keinen tatsächlichen
Main
Einstiegspunkt haben)
So scheint es, wie <legacyCorruptedStateExceptionsPolicy>
der einzige Weg ist, diese Arbeit zu machen, in welchem Fall mich weiß nicht, wie man nach dem Loggen des CSE scheitert?
Danke, also bedeutet das, dass ich die Handler-Methode 'AppDomain.CurrentDomain.UnhandledException' mit' [HandleProcessCorruptedStateExceptions] 'dekorieren kann und CSEs richtig erfasst werden? – Lou
Ja, das kannst du definitiv. Ich werde meine Antwort bearbeiten, um diesen Aspekt zu unterstreichen. – haindl