5

我在看这个问题;System.UnauthorizedAccessException:检索 Word 互操作的 COM 类工厂失败,出现错误 80070005。

我们在测试服务器中安装了 word,以便让 Word Interop 能够在上面工作。这导致了这个新错误,我无法应用我在 Componenet 服务 DCOM 配置上找不到 Microsoft Word 推荐的修复程序。那么我该如何解决这个问题呢?

4

4 回答 4

3

使用ERR 工具,我们看到错误:80070005 是访问被拒绝,因此您要么没有权限,要么是设计使然。

 for hex 0x80070005 / decimal -2147024891 :
  COR_E_UNAUTHORIZEDACCESS                                      corerror.h     
 MessageText: 
 Access is denied.
  DIERR_OTHERAPPHASPRIO                                         dinput.h       
  DIERR_READONLY                                                dinput.h       
  DIERR_HANDLEEXISTS                                            dinput.h       
  DSERR_ACCESSDENIED                                            dsound.h       
  ecAccessDenied                                                ec.h           
  ecPropSecurityViolation                                       ec.h           
  MAPI_E_NO_ACCESS                                              mapicode.h     
  STIERR_READONLY                                               stierr.h       
  STIERR_NOTINITIALIZED                                         stierr.h       
  E_ACCESSDENIED                                                winerror.h     
 General access denied error
 11 matches found for "0x80070005"

我之所以提到按设计是因为这篇知识库文章中记录的所有问题:Office 服务器端自动化的注意事项

在服务器操作系统上安装 Office 会导致各种问题。对于 VSTO 开发,我在 Win7 上安装 TFS 以进行自动构建以避免服务器端互操作问题。

不要使用服务器操作系统进行办公自动化,根据知识库文章不支持,使用 Win7!

Microsoft 强烈建议使用一些不需要在服务器端安装 Office 并且可以比自动化更高效、更快速地执行大多数常见任务的替代方案。在将 Office 作为服务器端组件加入项目之前,请考虑替代方案。

于 2013-03-18T07:13:46.943 回答
2

您不应该寻找确切的 000209FF-0000-0000-C000-000000000046 代码,在您的情况下它可能有不同的名称。我有 00021401-0000-0000-C000-000000000046,尝试根据最后一个寻找数字对。并且不要忘记在 mmc 控制台中添加服务组件选项卡。

更新

在此处输入图像描述

于 2013-03-18T07:52:37.220 回答
2

在不知道您从链接的 stackoverflow 帖子中尝试了什么的情况下:当 COM 对象不出现时,您通常需要运行

mmc -32

并手动添加组件服务管理单元。这在 Windows Server 2008 R2 和 Windows Server 2012 中都适用于我。

您还需要在以下位置创建桌面目录:

C:\Windows\SysWOW64\config\systemprofile

C:\Windows\System32\config\systemprofile

于 2013-03-12T11:39:13.947 回答
1

这比输入 SO 答案要容易得多,因为需要检查和对齐各种宫殿。

但总体目标是 1) 追踪尝试访问和启动/激活 COM 组件的安全帐户,以及 2) 哪个 COM 组件出现故障。

注意:所描述的程序会增加您的安全风险,因此请务必创建您所做的所有更改的大量日志,以便您知道究竟是什么解决了您的问题,而且您可以回滚所有不相关的内容。
注意 2一次更改一项,无论是否需要重新启动服务器。\ - 所以你知道是什么修复了它。

  • 从您的 Windows 日志开始——它们通常会记录所涉及的确切安全主体以及它尝试访问/激活的 DCOM 组件。通常两者:安全上下文和组件都非常明显 - 在这种情况下,您可以跳到dcomcnfg下面的段落。

  • 临时测试您是否已找到组件/帐户的一种方法是允许安全帐户的管理员权限或“每个人”访问组件并查看您是否消除了错误
    注意:这些是临时措施,仅用于测试。不要忘记回滚所有内容。

  • 您的永久配置更改将在组件服务 MMC 片段中完成。您可以通过手动将其添加到提升的 MMC 窗口,或者更简单地通过在管理员权限下运行以下命令来进行:

/>dcomcnfg

  • 尝试在 Component Services/Computers/My Computer/DCOM Config/ 下找到感兴趣的组件,右键单击并执行Properties在此处输入图像描述

  • 转到“安全”选项卡并将激活访问权限调整为可以解决您的问题的最低限度,但尽可能保持接近锁定状态。
    注意:我从来没有用 MS Office 互操作做过这个。请务必考虑这样做的所有安全隐患:
    在此处输入图像描述

这就是你开始的方式。我在所有版本的 Windows 上都这样做过,感觉总是不同的。通常我不得不依靠其他方法来跟踪这种情况:SysInternals“间谍”工具、Windows 安全审计、COM+ 应用程序属性,以及在少数情况下直接修改文件系统或注册表项 ACL。大多数时候它是实验室/开发机器,所以黑客,比如编辑注册表项的安全性,是可以的。

再次 - 跟踪并回滚您不需要的所有更改!

于 2013-03-19T02:38:41.383 回答