Ich habe Probleme mit einer fehlerhaften Bibliothek, die eine Ausnahme in einem Finalizer auslöst, was natürlich die Anwendung stürzt.Kann ich verhindern, dass eine nicht abgefangene Ausnahme in einer anderen AppDomain die Anwendung herunterfährt?
Um dies zu vermeiden, habe ich versucht, die Bibliothek in einer eigenen AppDomain zu laden, aber die Ausnahme sprudelt immer noch zur Oberfläche und stürzt die Anwendung ab.
Wie auf MSDN dokumentiert, verhindert die Registrierung auf AppDomain.UnhandledException
nicht verhindern, dass die Ausnahme sprudelt, aber ich bin ziemlich überrascht, dass es keine andere Möglichkeit gibt, eine solche Ausnahme in einer "Sub-AppDomain" zu fangen.
Wie können Plug-in-Hosts oder Anwendungen, die Anwendungsdomänen zum Sandboxing von potenziell schädlichem Code verwenden, unbehandelte Ausnahmen stoppen? Ist das tatsächlich möglich?
Hinweis: Ich habe bereits eine andere Problemumgehung, die eine beschrieben here. Der schlechte Finalizer befindet sich auf einem langlebigen Objekt, das anscheinend nur während des Herunterfahrens erfasst wird. Es reicht also aus, diesen "falschen" Fehler vor dem Benutzer zu verbergen. Dennoch finde ich diese Problemumgehung spröde, da sie entweder andere, echte Fehler verdeckt, oder das Risiko birgt, dass meine Anwendung in die Luft geht, wenn das Objekt früher erfasst wird.
Warum können Sie die Ausnahme nicht abfangen – rerun
Die Ausnahme wird in einem Finalizer ausgelöst, die in ihrem eigenen Thread von der CLR verwaltet ausgeführt wird, so kann ich nicht einen Ausnahmehandler auf den Thread setzen. Auch dies ist eine Bibliothek der "Legacy, unmaintaiend und wichtige Komponente ohne Quellcode verfügbar" Art ... –