2016-02-26 103 views
0

我有一個Outlook添加在我使用的地方Microsoft.Office.Interop.Outlook.Storageitem保存我的設置。單元測試失敗,HRESULT:0x80070005(E_ACCESSDENIED)TFS

我的大多數測試訪問設置以設置或獲取用於聯繫服務器的配置。

在我的本地機器上,所有的測試都運行良好。但是,當我在我的項目到TFS檢查和運行測試還有所有的人都失敗與錯誤:

System.UnauthorizedAccessException: Retrieving the COM class factory for component with CLSID {0006F03A-0000-0000-C000-000000000046} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).

當測試調用下面的代碼行出現的錯誤。

Folder inbox = (Folder) new Microsoft.Office.Interop.Outlook.Application().GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderInbox); 

我asume,由於測試試圖訪問展望應用並沒有允許出現錯誤。

  • 展望是哪裏TFS運行Windows Server 2012中上instaled。
  • 還沒有配置Mailaccount,Outlook啓動一次。 (測試運行良好,當我在一臺機器上手動啓動它時,沒有配置Mailaccount的Outlook。)
  • C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop文件夾存在。
  • 我已經爲用戶設置NETWORK SERVICE所有權限Controlpanel->管理工具 - >組件服務 - > computers-> myComputer-> DCOM Config-> Microsoft Outlook中 enter image description here

我還發現this question這對我的問題沒有答案。

是否有任何其他步驟可以嘗試讓我的測試成功運行測試?

+0

我已經使用TDD編寫了幾個Office加載項。我的建議是你的單元測試項目不應該使用真正的Outlook對象模型。測試項目甚至不應該引用Interop程序集。好消息是互操作程序集只公開接口,這使得他們真的可以使用模擬框架,如Moq https://github.com/Moq/moq4 –

+0

您正在使用哪個版本的TFS?你使用XAML構建還是vNext構建?你是如何配置構建定義的? –

回答

0

嘗試更改TFS構建服務器,使其作爲具有管理員權限的用戶運行。我不會建議離開這個配置。

0

可以在服務中使用Office應用程序(包括Outlook)。我不認爲實際上創建了一個Outlook.Application實例是一個單元測試的好主意。

0
​​

微軟目前並不提倡,不支持,Microsoft Office應用程序自動化從任何無人蔘與的非交互式客戶端應用程序或組件(包括ASP,ASP.NET,DCOM和NT Service),因爲Office在此環境中運行時可能會出現不穩定的行爲和/或死鎖。

如果您正在構建一個在服務器端上下文中運行的解決方案,那麼您應該嘗試使用對於無人執行安全的組件。或者,您應該嘗試找到允許至少部分代碼運行客戶端的替代方案。如果您從服務器端解決方案使用Office應用程序,則該應用程序將缺少成功運行所需的許多必要功能。此外,您將面臨整體解決方案穩定性的風險。請閱讀Considerations for server-side Automation of Office文章中的更多內容。

相關問題