【问题标题】:Unit Test fail with HRESULT: 0x80070005 (E_ACCESSDENIED) on TFS单元测试因 HRESULT 失败:TFS 上的 0x80070005 (E_ACCESSDENIED)
【发布时间】:2016-06-09 17:08:12
【问题描述】:

我有一个 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 的 Application 并且没有权限。

  • Outlook 安装在运行 TFS 的 Windows Server 2012 上。
  • Outlook 在没有配置邮件帐户的情况下也启动了一次。 (当我在没有配置邮件帐户的 Outlook 机器上手动启动测试时,测试运行良好。)
  • C:\Windows\SysWOW64\config\systemprofile\Desktop 文件夹存在。
  • 我已经在Controlpanel->Administrative tools->Component Services->computers->myComputer->DCOM Config->Microsoft Outlook 中为用户NETWORK SERVICE设置了所有权限时间>

我还发现 this question 没有解决我的问题。

还有其他步骤我可以尝试让我的测试访问以成功运行测试吗?

【问题讨论】:

  • 我已经使用 TDD 编写了几个 Office 加载项。我的建议是你的单元测试项目不应该使用真正的 Outlook 对象模型。测试项目甚至不应该引用互操作程序集。好消息是互操作程序集仅公开接口,这使得它们可以使用 Mock 框架(例如 Moq github.com/Moq/moq4
  • 您使用的是哪个版本的 TFS?您使用 XAML 构建还是 vNext 构建?你是如何配置构建定义的?

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


【解决方案1】:

不能在服务中使用任何 Office 应用(包括 Outlook)。我认为在单元测试中实际创建Outlook.Application 的实例并不是一个好主意。

【讨论】:

    【解决方案2】:

    Outlook 安装在运行 TFS 的 Windows Server 2012 上。

    我已经在控制面板->管理工具->组件服务->计算机-> myComputer->DCOM Config->Microsoft Outlook中为用户NETWORK SERVICE设置了所有权限

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        相关资源
        最近更新 更多