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

时间:2010-08-13 13:10:06

标签: c# asp.net vb.net office-interop

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

我当然包含了对Office.interop.word的引用,并且该站点在我的开发机器上运行良好。当我将其上传到我的生产服务器时,网站运行正常,直到我尝试上传文档。我最初得到一个类似的错误,说“COM对象没有注册”。我意识到我的生产服务器上没有安装Word。所以我安装了word,现在当服务器尝试访问word对象模型时,我收到以下错误:

由于以下错误,检索CLSID为{000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败:80070005拒绝访问。 (HRESULT异常:0x80070005(E_ACCESSDENIED))

我在注册表中搜索了相应的CLSID并找到了相应的文件夹。我添加了对IUSR_帐户的完全控制权并且由于错误的持续性,我最终将“完全控制”添加到“所有人”并确保这些权限继承到文件夹的其余部分。然后我添加了对IUSR_的完全控制,并最终再次将“every”添加到我的microsoft office文件夹中。

不知道要授予的其他权限以及为何使“拒绝访问”错误消失。我必须在错误的地方授予他们,因为至于我知道我不能比“每个人”“完全控制”更宽容。

任何人都可以放弃任何光明吗?

6 个答案:

答案 0 :(得分:59)

好的,我通过以下步骤解决了这个问题:

  1. 在命令行中输入DCOMCNFG
  2. 展开控制台根目录>组件服务>计算机,右键单击“我的电脑”,然后选择“属性”
  3. 在标签COM安全>中;启动和激活权限单击“编辑默认值”
  4. 添加用户(例如IIS_IUSRS)或服务
  5. 选中允许本地启动和本地激活
  6. 然后Excel,Word和其他应用程序可以正常工作,祝你好运。

答案 1 :(得分:39)

这对我有用:

  1. 在命令行中放置DCOMCNFG
  2. 组件服务 - >计算机 - >我的电脑 - > DCOM配置
  3. 查找" Microsoft Word 97 - 2003文档" (如果没有检查你的Word是否也是64位(如果你的Windows是),如果它没有运行mmc comexp.msc /32 而不是Darkseal here
  4. 建议的步骤1中的DCOMCNFG
  5. 右键单击 - >特性
  6. 转到选项卡安全性并编辑"自定义"单选按钮,以便IIS_IUSRS可以拥有启动和访问权限
  7. 转到标签标识,然后选择"互动用户"
  8. 应用更改并重试
  9. 如果这一切都失败了,请转到标签" General"并且在"身份验证级别"下拉选择"无"。

答案 2 :(得分:12)

在安装了Word的服务器计算机上的Windows Logs,System下的事件查看器中查找。您是否看到记录的事件类似于:

  

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

如果是这样,请运行DCOMCNFG.EXE,然后转到组件服务,计算机,我的电脑(或任何名称),DCOM配置(如果它询问您是否要修复任何内容,则可以回答“否”)事件日志消息用于应用程序,然后按事件日志消息中的名称查找,此处按项目名称查找,如果事件日志消息是针对CLSID(如上例所示),则通过CLSID“{148B ...}”找到它(这只是我粘贴的随机CLSID - 可能它将匹配您的000209FF ...上面),并选择更多操作...属性,到安全选项卡。

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

这只是一个猜测,但尝试一下,或者沿着这些方向进行尝试(即通过DCOMCNFG授予对CLSID的访问权限)。

答案 3 :(得分:5)

我很难用已接受的答案解决这个问题,因为 Microsoft Word 97 - 2003文档记录未在DCOM配置项中列出。我在this Technet blog post找到了解决方案,他们正确地解释了这个问题:

  

请务必注意,如果您安装了32位Microsoft Office   在64位计算机上,您可能需要使用32位DCOM配置管理器   查看程序,具体取决于您的操作系统。

     

在从Windows XP到Windows Server 2008的x64操作系统上,   64位版本的DCOMCNFG.EXE未正确配置32位   用于远程激活的DCOM应用程序。这种行为导致   要远程激活的组件而不是   在本地激活。在Windows 7和Windows中不会发生此问题   Windows Server 2008 R2及更高版本。

     

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

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

mmc comexp.msc /32

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

有关此主题的更多信息,您还可以在我的博客上read this post

答案 4 :(得分:1)

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

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

  1. 列表项
  2. 开始
  3. 运行
  4. MMC-32
  5. 文件
  6. 添加删除管理单元
  7. 组件服务
  8. 添加
  9. 控制台根目录
  10. 组件服务
  11. 计算机
  12. 我的电脑
  13. DCOM配置
  14. 之后

    1. 查找“Microsoft Word 97 - 2003文档”(如果缺少检查是否 你的Word也是64位(如果你的Windows是))
    2. 右键单击 - >特性
    3. 转到选项卡安全性并编辑“自定义”单选按钮以便这样做 IIS_IUSRS可以拥有启动和访问权限
    4. 转到标签标识,然后选择“交互式用户”应用更改 然后再试一次
    5. 如果所有这些都失败了,请同时转到“常规”标签和“身份验证” 级别“下拉选择”无“。

答案 5 :(得分:0)

除了上述内容外,我还遇到了一个我想分享的问题,以防其他人也遇到它。

使用互操作性的.net应用程序的应用程序池用户已添加到Admin中,但由于iis缓存环境而没有生效。除了执行iisreset以反映应用程序池用户的正确管理状态之外,还执行了上述操作之后,一切正常。