AddIn(MAF):在单独的进程中运行

时间:2014-01-25 00:46:26

标签: c# wpf maf system.addin

我有WPF主机应用程序,AddIn也是WPF,它返回UI,如下所述:

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

我想知道是否甚至可以激活WPF AddIn作为外部进程:看起来WPF加载项只被认为与AppDomain隔离一起使用,这对我们的应用程序来说还不够好。如果AddIn由于任何原因崩溃,我们不能让主机一直崩溃。即使加载了AddIn崩溃,我们也希望我们的主机应用程序能够运行。

我知道我们可以通过以下方式在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);

但我的WPF AddIns不是System.AddIn因为我们的AddIns有WPF UI组件。

我可以在新应用域中激活WPFAddIn,如下所示:

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

我无法获得有关使用WPF AddIns处理此情况的任何最新信息。是否有任何可能的示例如何在单独的进程中激活WPF AddIn或在主机中捕获未处理的异常。基本上我不能允许主机在addIn崩溃时死掉。 我确实按照以下链接,但结果是线程很老,没有当前信息。

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

如果我可以在主机中处理异常也会很好。让我解释一下我的问题:

我有WPF主机“A”。有WPF AddIn“B”。

我已在主机“A”中加载了AddIn“B”。 AddIn“B”有一个单击按钮。当用户单击按钮时,将在AddIn“B”中触发事件。在那种情况下,没有尝试捕获可用,并且从该事件抛出一些null异常。这个未处理的异常导致我的主机(WPF应用程序也崩溃)。

我正在寻找一个解决方案,我可以在主机“A”中处理此异常,卸载AddIn“B”并继续Host而不会发生任何崩溃。

我尝试使用AddInSecurityLevel.FullTrust以及AddInSecurityLevel.Internet添加AddIn。

任何提示或示例都会有所帮助。

1 个答案:

答案 0 :(得分:5)

我认为遵循msdn杂志的文章清楚地解释了如何设计容错的基于插件的应用程序,其中插件是在单独的进程中托管的。它也有一个样本。在示例中,可以轻松处理插件的异常,而不会影响主机应用程序或其他插件。

在WPF中构建容错复合应用程序 http://msdn.microsoft.com/en-us/magazine/dn519924.aspx