TFS上的单元测试失败,HRESULT:0x80070005(E_ACCESSDENIED)

时间:2016-02-26 13:03:54

标签: c# unit-testing tfs office-interop outlook-addin

我在Outlook中添加 Microsoft.Office.Interop.Outlook.Storageitem 以保存我的设置。

我的大多数测试都会访问设置以设置或获取与服务器联系的配置。

在我的本地计算机上,所有测试都运行良好。但是当我将我的项目签入TFS并运行测试时,所有这些测试都失败并出现错误:

  

System.UnauthorizedAccessException:由于以下错误,检索具有CLSID {0006F03A-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005拒绝访问。 (HRESULT异常:0x80070005(E_ACCESSDENIED))。

当测试调用以下代码行时,会发生错误。

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

我认为错误出现是因为测试试图访问 Outlook 应用程序并且没有权限。

  • 在运行TFS的 Windows Server 2012 上安装了Outlook。
  • 在没有配置Mailaccount的情况下,Outlook也启动了一次。 (当我在配置了没有配置Mailaccount的Outlook的计算机上手动启动测试时,测试运行正常。)
  • C:\ Windows \ SysWOW64 \ config \ systemprofile \ Desktop 文件夹存在。
  • 我已经在 Controlpanel->管理工具 - >组件服务 - >计算机 - >中为用户网络服务设置了所有权限myComputer-> DCOM配置 - > Microsoft Outlook enter image description here

我还发现this question对我的问题没有答案。

我是否还有其他步骤可以尝试让我的测试成功运行测试?

3 个答案:

答案 0 :(得分:0)

尝试将TFS构建服务器更改为以具有管理员权限的用户身份运行。我不建议保留此配置。

答案 1 :(得分:0)

无法在服务中使用Office应用程序(包括Outlook)。我不认为实际上创建一个Outlook实例。应用程序在单元测试中是一个好主意。

答案 2 :(得分:0)

  

Outlook正在运行TFS的Windows Server 2012上运行。

     

我已经在Controlpanel中设置了用户NETWORK SERVICE的所有权限 - >管理工具 - >组件服务 - >计算机 - > myComputer-> DCOM配置 - > Microsoft Outlook

Microsoft目前不建议也不支持从任何无人参与的非交互式客户端应用程序或组件(包括ASP,ASP.NET,DCOM和NT服务)自动化Microsoft Office应用程序,因为Office在此环境中运行Office时,可能会出现不稳定的行为和/或死锁。

如果要构建在服务器端上下文中运行的解决方案,则应尝试使用已为安全无人值守执行的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方法。如果从服务器端解决方案使用Office应用程序,则应用程序将缺少许多成功运行的必要功能。此外,您将承担整体解决方案稳定性的风险。请在Considerations for server-side Automation of Office文章中详细了解相关内容。