【问题标题】:Installed Word on the server but cannot find it to set permissions in Component Services在服务器上安装了 Word 但找不到它以在组件服务中设置权限
【发布时间】:2013-02-21 11:22:12
【问题描述】:

我在 SO 上查看这个问题; System.UnauthorizedAccessException: Retrieving the COM class factory for Word Interop fails with error 80070005.

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

【问题讨论】:

  • 您确定 word 没有安装在 64 位?

标签: c# com office-interop


【解决方案1】:

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

mmc -32

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

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

C:\Windows\SysWOW64\config\systemprofile

C:\Windows\System32\config\systemprofile

【讨论】:

  • 原谅我的无知,这是我第一次尝试这个。如何“手动添加组件服务管理单元”?
  • 使用上述命令打开 MMC 后;从菜单列表中选择文件;然后添加或删除管理单元。从左侧列表中选择 Compoenent Services,然后单击添加按钮;然后单击确定。然后您可以从那里选择组件服务对象;通常是组件服务 -> 计算机 -> 我的电脑 -> DCOM 配置。如果您打开了诺顿扫描,请关闭它;它有时会引发错误。
【解决方案2】:

使用ERR tool,我们会看到错误: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"

由于这篇知识库文章中记录的所有问题,我提到了按设计:Considerations for server-side Automation of Office

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

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

Microsoft 强烈推荐一些替代方案 需要在服务器端安装 Office,并且可以执行大多数 比自动化更有效、更快速的常见任务。前 您将 Office 作为项目中的服务器端组件, 考虑替代方案。

【讨论】:

  • 看来我应该改用 OpenXML。
  • OpenXML 不是我想要打印 Word 文档的答案,据我所知只有 Interop 可以做到这一点。
  • 我将LINQ to XML 用于我的服务器端办公自动化。请检查您的所有客户/用户是否安装了 Office 2003 或更高版本。
【解决方案3】:

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

更新

【讨论】:

  • 除了最后一句我不明白这个答案。组件服务存在,但组件服务中的 Word 不存在。
  • @arame3333 你不应该通过它的名字来寻找你的单词 app,而是通过它的 COM 类 ID,它在你的注册表中注册。就像我描述的那样 - 5 对数字。我添加了 COM Word 组件的屏幕(在我的例子中是 000209FF-0000-0000-C000-000000000046),我在上面设置了权限,如您的帖子中所述。
  • 我无法让它工作。我有和你一样的 Word 应用程序。你授权给谁了?
  • @arame3333 您应该右键单击它 => 属性 => 安全 => 启动和激活权限 => 自定义。您应该在此处授予您的 ASP 服务帐户的权限
【解决方案4】:

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

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

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

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

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

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

/>dcomcnfg

  • 尝试在 Component Services/Computers/My Computer/DCOM Config/ 下找到感兴趣的组件,右键单击并执行 Properties:

  • 转到 Security 选项卡,将 ActivateAccess 权限调整到可以解决问题的最低限度,但是尽可能接近锁定状态。
    注意:我从来没有在 MS Office 互操作器上这样做过。请务必考虑这样做的所有安全隐患:

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

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

【讨论】:

  • 嗨,当我按照这个步骤操作时,我会看到你显示的锁定屏幕,我如何在这些屏幕上启用更改?
  • 那是很久以前的事了,但我认为您需要修改密钥的 ACL(很可能是所有权)。很抱歉,我无法提供更多帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
  • 2019-01-17
  • 2010-10-06
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
相关资源
最近更新 更多