C# 如何正确处理windows服务主机内的MAF加载项崩溃?

C# 如何正确处理windows服务主机内的MAF加载项崩溃?,c#,windows-services,maf,C#,Windows Services,Maf,我有一个windows服务,它使用MAF加载用户创建的插件。以下是我加载每个加载项的方式: public bool ActivatePlugin() { try { _addin = _token.Activate<IAddIn>(AddInSecurityLevel.Host); return true; } catch(Exception ex) { AddToLog("Error activ

我有一个windows服务,它使用MAF加载用户创建的插件。以下是我加载每个加载项的方式:

public bool ActivatePlugin()
{
    try
    {
        _addin = _token.Activate<IAddIn>(AddInSecurityLevel.Host);
        return true;
    }
    catch(Exception ex)
    {
        AddToLog("Error activating plugin");
        return false;
    }
}
public bool ActivatePlugin()
{
尝试
{
_addin=_token.Activate(AddInSecurityLevel.Host);
返回true;
}
捕获(例外情况除外)
{
AddToLog(“错误激活插件”);
返回false;
}
}

所有加载项都将正常加载,没有任何问题。我遇到的问题是,我无法控制加载项的质量,有时它们会崩溃并导致整个服务停止。是否有一种方法可以让我正确地捕获由加载项产生的任何错误,从而不会使服务崩溃。

您需要在单独的AppDomain甚至单独的进程中加载加载项。您可能还想使用
AppDomain.UnhandledException
来提醒您一个失败的加载项-它仍然会失败,但在退出时会提醒您


查看以下答案:。

查看System.AddIn团队博客中的这些文章,了解异常处理和加载项的信息:

基本上,唯一安全的方法是在单独的过程中激活外接程序。这很容易,因为MAF提供了一种实现这一点的方法,但正如您可以想象的那样,它在性能方面非常昂贵

请注意,在不同的应用程序域中激活外接程序并不保证外接程序不会使主机崩溃。如果外接程序创建的线程引发未经处理的异常,主机将崩溃

我知道这个问题有点老了,但其他人可能会发现这个信息很有用