2014-01-25 55 views
2

我有WPF主机应用程序和外接也WPF如下所述它返回UI:外接程序(MAF):运行在单独的进程

[链接] 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加载项不System.AddIn因为我们的加载项有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加载项这种情况下,任何任何先进的最新信息。是否有任何可能的例子,如何在单独的进程中激活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”中被触发。在这种情况下,没有尝试捕获可用的,并从该事件抛出一些空的异常。这个未处理的异常导致我的主机(WPF应用程序)崩溃。

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

我试过用AddInSecurityLevel.FullTrust以及AddInSecurityLevel.Internet加入。

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

+0

而是将所有这些复杂性(MAF),你可以监视加载项崩溃您的应用程序,如果他们崩溃往往黑名单他们。然后允许用户启用不稳定的插件。这是MS OFFICE的方法(http://office.microsoft.com/en-us/outlook-help/enable-or-disable-add-ins-in-office-programs-HA010034127.aspx#BM1)。 –

+0

嗨Panos-我已经使用MAF(WPF AddIn)管道方式来加载插件。有没有什么办法来防止在这个MAF-WPF AddIn方法中崩溃。因为我们无法在单独的进程中运行WPF AddIns。 – user2506411

+0

AppDomain隔离不能保证这一点。在某些情况下,它可以但不完全。看看http://stackoverflow.com/a/16438141/850119。在你的情况当然你不能有进程隔离。但其余的适用。 –

回答

5

我认为以下msdn杂志文章清楚地说明了如何设计容错插件的应用程序,其中插件托管在单独的进程中。它也有样品。在示例中,插件的例外很容易处理,而不会影响主机应用程序或其他插件。

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

+0

Praggie-感谢您的回复。我会试一试并报告结果。 – user2506411

+1

我终于在我们的应用程序中使用“在WPF中构建容错组合应用程序”。根据我们的需求,它工作得很好。如果插件因任何原因崩溃 - 主机应用程序没有崩溃。因为插件运行在它自己的独立进程中。插件加载/初始化比MAF/WPF AddIn快得多。 – user2506411

相关问题