1

ユーザーが作成したプラグインをロードするために MAF を使用する Windows サービスがあります。各アドインをロードする方法は次のとおりです。

public bool ActivatePlugin()
{
    try
    {
        _addin = _token.Activate<IAddIn>(AddInSecurityLevel.Host);
        return true;
    }
    catch(Exception ex)
    {
        AddToLog("Error activating plugin");
        return false;
    }
}

すべてのアドインは問題なくロードされます。私が抱えている問題は、アドインの品質を制御できず、時々クラッシュしてサービス全体が停止することです。サービスがクラッシュしないように、アドインから発生するエラーを適切にキャッチする方法はありますか?

4

2 に答える 2

3

例外処理とアドインについては、System.AddIn チームのブログの次の記事を参照してください。

http://blogs.msdn.com/b/clraddins/archive/2007/05/01/using-appdomain-isolation-to-detect-add-in-failures-jesse-kaplan.aspx

http://blogs.msdn.com/b/clraddins/archive/2007/05/03/more-on-logging-unhandledexeptions-from-managed-add-ins-jesse-kaplan.aspx

基本的に、安全を確保する唯一の方法は、別のプロセスでアドインをアクティブ化することです。これは、MAF がその方法を提供するので簡単ですが、ご想像のとおり、パフォーマンスの点でコストがかかります。

別のアプリケーション ドメインでアドインをアクティブ化しても、アドインがホストをクラッシュさせないという保証はないことに注意してください。アドインによって作成されたスレッドによって未処理の例外が発生した場合、ホストはクラッシュします。

この質問は少し古いことは知っていますが、他の誰かがこの情報を役立つと思うかもしれません.

于 2012-04-03T10:09:12.493 に答える
0

アドインを個別のAppDomainまたは個別のプロセスにロードすることをお勧めします。また、失敗したアドインを警告するために使用することもAppDomain.UnhandledExceptionできます。それでも失敗しますが、途中で警告が表示されます。

この回答を確認してください:堅牢なプラグイン/アドオン管理のための優れたアーキテクチャ/ライブラリ

于 2012-01-03T21:24:11.290 に答える