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

Cam*_*olf 49 c# vb.net asp.net office-interop

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

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

检索COM类工厂CLSID组件{000209FF-0000-0000-C000-000000000046}失败,原因是以下错误:80070005次访问被拒绝.(HRESULT异常:0x80070005(E_ACCESSDENIED))

我在注册表中搜索了相应的CLSID,并找到了相应的文件夹.我说完全控制IUSR_帐户,因为我最终加入完全控制"每个人"错误的持久性,并确保这些权限继承下来到该文件夹​​的其余部分.然后我添加了对IUSR_的完全控制,并最终再次将"every"添加到我的microsoft office文件夹中.

不知道授予哪些其他权限以及为了使"访问被拒绝"错误消失的地方. 我一定是在错误的地方给予他们,因为据我知道,我不能有任何比"所有人""完全控制"更宽容.

谁能摆脱任何光明?

小智 59

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

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

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


gyo*_*fov 42

这对我有用:

  1. 在命令行中输入 DCOMCNFG
  2. 组件服务 - >计算机 - >我的电脑 - > DCOM配置
  3. (如果缺少检查,如果您的Word也是64位(如果您的Windows是),如果它不运行- "2003文档Microsoft Word 97中"查找mmc comexp.msc /32 ,而不是DCOMCNFG在步骤1中,通过建议Darkseal 这里)
  4. 右键单击 - >属性
  5. 转到选项卡安全性并编辑"自定义"单选按钮,以便IIS_IUSRS可以拥有启动和访问权限
  6. 转到Tab Identity并选择"交互式用户"
  7. 应用更改并重试
  8. 如果所有这些都失败了,请同时转到"常规"选项卡,然后在"身份验证级别"下拉菜单中选择"无".

  • 对于在64位计算机上运行的32位COM程序包,根据Darkseal的答案(/sf/answers/3061580161/),使用`mmc comexp.msc/32`运行DCOMCNFG.@gyosifov - 请考虑在步骤#1中包含此信息. (2认同)
  • 这可能是SO中最好的答案。你刚刚救了我的命。 (2认同)

Jim*_*ood 12

查看安装了Word的服务器计算机上的Windows日志,系统下的事件查看器.您是否看到记录的事件类似于:

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

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

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

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


Dar*_*eal 5

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

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

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

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

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

mmc comexp.msc /32
Run Code Online (Sandbox Code Playgroud)

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

有关此主题的更多信息,您还可以在我的博客上阅读此文章.