2009-12-07 57 views
0

我們正在使用.Net 3.0爲Outlook編寫聯繫人同步應用程序。我們使用「Microsoft Outlook 12.0 Object Library」或Microsoft.Office.Interop.Outlook;C#Outlook - 用戶退出

我們注意到,當我們致電:

ApplicationClass app = new Microsoft.Office.Interop.Outlook.ApplicationClass(); 

這將啓動Outlook,如果用戶沒有打開它。但是,如果用戶在我們的應用程序處於打開狀態時關閉了Outlook,那麼下次我們引用Outlook ApplicationClass實例時會出現COMException。

我們該如何彌補這種行爲?如果我們發現這個異常,我們不想重新打開Outlook。

我們寧願Outlook根本不啓動或隱藏,但我們希望用戶即使在我們的應用程序處於打開狀態時也能夠使用Outlook。

我們也可以以某種方式掛鉤到ApplicationExit事件或其他東西,但是如果我們現在創建一個新的ApplicationClass,它會再次啓動Outlook嗎?

我們該如何解決這個問題?

回答

2

我同意Adam的觀點,但不是捕捉異常,而是應該掛入process.exit事件,然後重新創建對象。這將啓動一個新的Outlook實例。這就是它的工作原理。或者,只有當用戶啓動Outlook時,才能運行同步。

如果涉及交換服務器,您可以查看API來反對交換。

+0

我認爲這是最好的選擇,雖然醜陋我不認爲微軟提供了另一種方式 – jonathanpeppers 2009-12-07 19:47:15

1

如果沒有運行主機應用程序,您將無法使用Outlook(或任何Office)COM互操作庫,並且(就我所知,Outlook不提供運行多個實例的功能)創建自己隱藏的實例可能不是一種選擇。

我唯一的建議是捕捉異常,向用戶顯示一個警告對話框,不關閉Outlook,然後優雅地重新打開它。很明顯,這不是你正在尋找的解決方案,但我不認爲有辦法強迫Outlook公開。

0

如果您的outlook用戶是交換用戶,您也可以與交換同步(取決於您在做什麼)。有很多選項可用於連接,取決於版本:Exchange Web服務,或者DAV或通過Mapi都可以。

+0

我們希望它只與Outlook一起工作,沒有交換服務器。這樣它支持多個電子郵件服務器。 – jonathanpeppers 2009-12-11 17:27:08