2014-01-25 16 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

相關問題