通过asp.net访问Office Word对象模型导致“由于以下错误而失败:80070005访问被拒绝”。

我开发了一个网站,允许用户上传office文档,然后使用office对象模型将文档转换为HTML文件,然后显示在iFrame中。

当然,我已经包含了对Office.interop.word的引用,并且该网站在我的开发机器上正常工作。 当我上传到我的生产服务器时,该网站的function正常,直到我尝试上传文件。 我最初有一个类似的错误,说“COM对象未注册”。 我意识到,Word没有安装在我的生产服务器上。 所以我安装了单词,现在当服务器试图访问单词对象模型时,我收到以下错误:

检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:80070005访问被拒绝。 (从HRESULTexception:0x80070005(E_ACCESSDENIED))

我search了相应的CLSID的registry,并find了相应的文件夹。 我向IUSR_帐户添加了完全控制权,并且由于错误的持续性,我最终将完全控制权添加到“所有人”,并确保将这些权限inheritance到文件夹的其余部分。 然后,我将完全控制权添加到IUSR_,并最终将完全控制权添加到“所有人”到我的Microsoft Office文件夹。

不知道还有什么其他权限可以授予,以及为了使这个“访问被拒绝”错误消失。 我必须把他们放在错误的地方,因为据我所知,我不能再比“人人”“完全控制”更放纵了。

任何人都可以摆脱任何光?

这对我工作:

  1. 在命令行中放入DCOMCNFG
  2. 组件服务 – >计算机 – >我的电脑 – > DCOMconfiguration
  3. find“Microsoft Word 97 – 2003文档”(如果缺less检查您的Word是否也是64位(如果您的Windows是))
  4. 右键单击 – >属性
  5. 转到选项卡安全并编辑“自定义”单选button,以便IIS_IUSRS可以有权启动和访问
  6. 转到选项卡标识并select“交互式用户”
  7. 应用更改并重试
  8. 如果所有这些都失败了,也请select“常规”并在“身份validation级别”下拉select“无”。

好的,我用这个步骤解决了这个问题:

  1. 在命令行中放入DCOMCNFG
  2. 展开控制台根目录>组件服务>计算机,右键单击我的电脑,然后select属性
  3. 在选项卡COM安全性>启动和激活权限单击编辑默认值
  4. 添加用户(例如IIS_IUSRS)或服务
  5. 选中允许本地启动和本地激活

然后Excel,Word和其他应用程序可以工作,祝你好运。

在事件查看器中,在安装Word的服务器上的Windows日志,系统下。 您是否看到logging的事件类似于:

机器默认权限设置不授予对CLSID {148BEE7F-6123-41EE-8CCA-E390902BD0D8}的COM服务器应用程序的本地激活权限给用户SomeMachine \ SomeUser SID(S-1-5-21-483881670-2168941642- 1987552629-1003)从地址LocalHost(使用LRPC)。 可以使用组件服务pipe理工具修改此安全权限。

如果是这样,运行DCOMCNFG.EXE,并转到组件服务,计算机,我的电脑(或任何名称),DCOMconfiguration(如果你想要解决任何问题,你可以回答“否”),如果事件日志消息是针对应用程序的 ,然后通过事件日志消息中的名称(这里按项目名称)查找它,如果事件日志消息是针对CLSID的(如上面的示例),则通过CLSID“{148B .. 。“(这只是一个随机的CLSID我粘贴 – 可能会匹配您的000209FF …以上),并select更多操作…属性,到安全选项卡。

在这里,您可以select[x]自定义,然后编辑,以添加相应用户帐户的权限,以激活和访问所需的DCOM应用程序或类。

这只是一个猜测,但试一试,或沿着这些线(即通过DCOMCNFG授予访问CLSID)。

我有困难的时候使用接受的答案来解决这个问题,因为Microsoft Word 97 – 2003文档logging没有在DCOMconfiguration项目中列出。 我在这篇Technet博客文章中find了解决scheme,他们正确地解释了这个问题:

需要注意的是,如果在64位计算机上安装32位Microsoft Office,则可能需要使用32位DCOMconfigurationpipe理器来查看程序,具体取决于您的操作系统。

在从Windows XP到Windows Server 2008的x64操作系统上,64位版本的DCOMCNFG.EXE未正确configuration32位DCOM应用程序以进行远程激活。 此行为会导致远程激活的组件被本地激活。 在Windows 7和Windows Server 2008 R2及更高版本中不会发生此行为。

参考: http : //msdn.microsoft.com/en-us/library/windows/desktop/ms678426( v=vs.85) .aspx

并且还build议使用以下命令行命令(而不是DCOMCNFG )作为有效的修复:

 mmc comexp.msc /32 

哪些强制加载32位DCOMconfigurationpipe理器,而不是64位,并允许执行接受的答案中所述的步骤。 如果这仍然不起作用,文章还解释了一些其他可能的解决方法。

有关这个主题的更多信息,你也可以阅读这篇文章 。

如果在DCOM中找不到Microsoft Word应用程序

在32位Office的64位系统上试试这个:

  1. 项目清单
  2. 开始
  3. MMC-32
  4. 文件
  5. 添加删除pipe理单元
  6. 组件服务
  7. 控制台根
  8. 组件服务
  9. 电脑
  10. 我的电脑
  11. DCOMconfiguration

之后

  1. find“Microsoft Word 97 – 2003文档”(如果缺less检查您的Word是否也是64位(如果您的Windows是))
  2. 右键单击 – >属性
  3. 转到选项卡安全并编辑“自定义”单选button,以便IIS_IUSRS可以有权启动和访问
  4. 转到选项卡标识并select“交互式用户”应用更改并再试一次
  5. 如果所有这些都失败了,也请select“常规”并在“身份validation级别”下拉select“无”。