在服务器上安装Word但无法找到它在组件服务中设置权限

时间:2013-03-06 15:23:37

标签: c# com office-interop

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

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

4 个答案:

答案 0 :(得分:3)

使用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以进行自动构建,以避免服务器端互操作问题。

不要使用Server OS进行Office自动化,根据不支持的知识库文章,使用Win7!

  

Microsoft强烈建议不要使用许多替代方案   要求Office安装在服务器端,并且可以执行最多的操作   比自动化更高效,更快速地完成常见任务。之前   您将Office作为项目中的服务器端组件,   考虑替代方案。

答案 1 :(得分:2)

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

mmc -32

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

您还需要在以下位置制作桌面目录:

  

C:\的Windows \ Syswow64资料\配置\ systemprofile

     

C:\的Windows \ system32 \设置\ systemprofile

答案 2 :(得分:2)

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

<强>已更新

enter image description here

答案 3 :(得分:1)

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

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

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

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

  • 如果您找到了,那么临时测试的一种方法 组件/帐户是允许安全性的管理员权限 帐户或“每个人”访问该组件,看看你是否 消除错误
    注意:这些是临时措施,仅用于测试。别忘了把所有东西都卷回来。

  • 您的永久配置更改将在Component Services MMC代码段中完成。您可以手动将其添加到提升的MMC窗口,也可以通过在管理员权限下运行以下命令来实现:

  

/&GT; DCOMCNFG

  • 尝试在“组件服务/计算机/我的电脑/ DCOM配置/”下找到感兴趣的组件,右键单击并执行属性enter image description here

  • 转到安全标签,然后将激活访问权限调整到最低限度,以解决您的问题,但保持尽可能靠近锁定状态。
    注意:我从未使用MS Office interops这样做。请务必考虑这样做的所有安全隐患:
    enter image description here

这就是你如何开始的。我已经在所有类型的Windows上做到了这一点,它总是感觉不同。通常我必须依赖其他跟踪此情况的方法:SysInternals“间谍”工具,Windows安全审核, COM +应用程序属性,并在某些情况下直接修改文件系统或注册表项ACL。大多数时候它是实验室/开发者机器,所以黑客,如编辑注册表项的安全性,是好的。

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