2

私はWPFホストアプリを持っており、アドインは以下に説明するようにUIを返すWPFでもあります:

[リンク] http://msdn.microsoft.com/en-us/library/bb909849%28v=vs.110%29.aspx

WPF アドインを外部プロセスとしてアクティブ化することさえ可能かどうか知りたいです。WPF アドインは AppDomain 分離でのみ使用されると考えられているようですが、これは私たちのアプリには十分ではありません。アドインが何らかの理由でクラッシュした場合、ホストが常にクラッシュすることは許されません。ロードされたアドインがクラッシュした場合でも、ホスト アプリが実行されるようにします。

以下を使用してこれを達成できることを私は知っていSystem.AddInます:

//Activate the selected AddInToken in a new 
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(new AddInProcess(), AddInSecurityLevel.fulltrust);

しかしSystem.AddIn、アドインに WPF UI コンポーネントがあるからではなく、WPF アドインがあります。

次のように、新しいアプリ ドメインで WPFAddIn をアクティブ化できます。

//Activate the selected AddInToken in a new 
//application domain with the Internet trust level.
Calculator CalcAddIn = selectedToken.Activate<Calculator>(AddInSecurityLevel.Internet);

WPF アドインでこの状況を処理するための最新情報を入手できませんでした。別のプロセスで WPF AddIn をアクティブにする方法、またはホストで未処理の例外をキャッチする方法の例はありますか。基本的に、アドインがクラッシュしたときにホストが死ぬのを許すことはできません。次のリンクをたどりましたが、スレッドが非常に古く、現在の情報がないことが判明しました。

[リンク] http://social.msdn.microsoft.com/Forums/vstudio/en-US/3c8592f2-14a6-418b-ab11-6d18096aaa0c/systemaddin-addinprocess-and-wpf?forum=wpf

ホストで例外を処理できれば、それも問題ありません。私の問題を説明しましょう:

私はWPFホスト「A」を持っています。WPFアドイン「B」があります。

ホスト「A」にアドイン「B」をロードしました。アドイン「B」にはクリックボタンがあります。ユーザーがボタンをクリックすると、アドイン「B」でイベントが発生します。そのイベントでは、利用可能な try キャッチはなく、そのイベントからいくつかの null 例外がスローされます。この未処理の例外により、ホスト (WPF アプリも) がクラッシュしました。

ホスト「A」でこの例外を処理し、アドイン「B」をアンロードして、クラッシュすることなくホストを続行できるソリューションを探しています。

AddInSecurityLevel.FullTrustと同様に アドインを試しましたAddInSecurityLevel.Internet

ヒントや例は役に立ちます。

4

1 に答える 1

5

次の msdn マガジンの記事では、プラグインが別のプロセスでホストされているフォールト トレラントなプラグベースのアプリケーションを設計する方法が明確に説明されていると思います。こちらもサンプル付きです。サンプルでは、​​ホスト アプリケーションや他のアドインに影響を与えることなく、アドインの例外が簡単に処理されます。

WPF でフォールト トレラントな複合アプリケーションを構築する http://msdn.microsoft.com/en-us/magazine/dn519924.aspx

于 2014-01-26T14:52:18.307 に答える