Mam problem z źle zachowaną biblioteką, która zgłasza wyjątek w finalizatorze, co oczywiście powoduje awarię aplikacji.Czy mogę wyłączyć nieprzechwycony wyjątek w innym AppDomain od wyłączenia aplikacji?
Aby tego uniknąć, próbowałem załadować bibliotekę we własnej domenie AppDomain, ale wyjątek nadal jest wyświetlany na powierzchni i powoduje awarię aplikacji.
Zgodnie z dokumentacją MSDN, rejestracja na AppDomain.UnhandledException
nie zapobiega powstawaniu bulgoczącego wyjątku, ale jestem zaskoczony, że nie ma innego sposobu na złapanie takiego wyjątku w "sub AppDomain".
W jaki sposób wtyczki obsługujące wtyczki lub aplikacje używające domeny AppDomains do piaskowania potencjalnie szkodliwego kodu robią, aby zatrzymać nieobsługiwane wyjątki? Czy to w ogóle możliwe?
Uwaga: Mam już inne obejście problemu, opisane here. Zły finalizator znajduje się na długo żyjącym obiekcie, który wydaje się być gromadzony tylko podczas zamykania, więc wystarczy ukryć ten "fałszywy" błąd od użytkownika. Mimo to uważam, że to obejście jest kruchy, ponieważ albo ukryje inne, prawdziwe błędy, albo ryzykuje wysadzenie mojej aplikacji, jeśli obiekt zostanie zebrany wcześniej.
Dlaczego nie można złapać wyjątku? – rerun
Wyjątek jest zgłaszany w Finalizerze, który działa we własnym wątku zarządzanym przez CLR, więc nie mogę umieścić obsługi wyjątku w wątku. Jest to również biblioteka "starszego, nieprzydatnego i ważnego komponentu bez kodu źródłowego" ... –