2011-10-22 4 views
7

おそらくコピー:Can I prevent an uncaught exception in another AppDomain from shutting down the application?ロードした別のAppDomainが未処理の例外をスローすると、現在のAppDomainを切り離すことができますか?

この質問に対する回答を一日中試してみました。

ドライバが別のappdomain内に隔離され、古い学校のプロセスに置き換えられるように、すべてのコードを捨てる前に、答えが本当にnoであることを確認してください。

したがって正式な質問はこれです。

新しいドメイン「ad-hosted」を作成するデフォルトのドメイン「ad-default」を使用すると、「ad-hosted」の処理されない例外が「ad-default」になるのを避けることはできますか?

"ad-hosted"ドメインのUnhandledExceptionイベントに接続することで例外を守ることができますが、 "ad-default"ドメインへの伝播を止める方法は見つけられません。

これは本当ですか?しかし、分離を提供しないとAppDomainのものが必要なのはなぜですか?

EDIT: 答えは残念ながらNO、説明のためにこの答えを見ている: AppDomain, handling the exceptions

+1

重複していません。 –

答えて

3

デフォルトのドメインを切断から別のAppDomain内のスレッドで例外を分離する唯一の方法は使用することです。

<runtime> 
    <legacyUnhandledExceptionPolicy enabled="1"/> 
<runtime> 

unhandledexceptionのIsTerminatingフラグをfalseに設定し、既定のドメインがシャットダウンしないようにします。

私たちのケースでは、両方のドメインでUnhandledExceptionHandlerに接続することができました。 「広告ホスト」のセマフォをトリガし、この目的のために作成されたスレッドが「広告デフォルト」で選択し、「広告ホスト」を廃棄します。

ハックやフレームワークの将来の世代には生き残ることはできませんが、「広告のデフォルト」をより堅牢にして、「広告ホスト」の未処理の例外で解体されることはありません。

"ad-default"で送信者をキャストし、例外が "ad-default"で始まっているかどうかを確認するイベントハンドラを作成する。そうすれば、 "ad-default"も破棄し、.net 2.0の動作をエミュレートする上記のランタイム設定を使用します。

これは、誰かがより弾力性の高いプラグインホストを作成する方法のヒントを与えることを期待しています。

関連する問題