我有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崩溃时死掉。 我确实按照下面的链接,但事实证明,线程是非常古老的,没有最新的信息。
如果我能处理的主机将被罚款过例外。让我解释我的问题:
我有WPF主机“A”。有WPF AddIn“B”。
我在主机“A”中加载了AddIn“B”。 AddIn“B”有一个点击按钮。当用户点击一个按钮时,事件将在AddIn“B”中被触发。在这种情况下,没有尝试捕获可用的,并从该事件抛出一些空的异常。这个未处理的异常导致我的主机(WPF应用程序)崩溃。
我正在寻找一个解决方案,我可以在主机“A”中处理这个异常,卸载AddIn“B”并继续主机而没有任何崩溃。
我试过用AddInSecurityLevel.FullTrust
以及AddInSecurityLevel.Internet
加入。
任何提示或示例都会有所帮助。
而是将所有这些复杂性(MAF),你可以监视加载项崩溃您的应用程序,如果他们崩溃往往黑名单他们。然后允许用户启用不稳定的插件。这是MS OFFICE的方法(http://office.microsoft.com/en-us/outlook-help/enable-or-disable-add-ins-in-office-programs-HA010034127.aspx#BM1)。 –
嗨Panos-我已经使用MAF(WPF AddIn)管道方式来加载插件。有没有什么办法来防止在这个MAF-WPF AddIn方法中崩溃。因为我们无法在单独的进程中运行WPF AddIns。 – user2506411
AppDomain隔离不能保证这一点。在某些情况下,它可以但不完全。看看http://stackoverflow.com/a/16438141/850119。在你的情况当然你不能有进程隔离。但其余的适用。 –