我开发了一个网站,允许用户上传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文件夹中。
我不知道要授予的其他权限以及为何使“拒绝访问”错误消失。我必须在错误的地方授予他们,因为至于我知道我不能比“每个人”“完全控制”更宽容。
任何人都可以放弃任何光明吗?
答案 0 :(得分:59)
好的,我通过以下步骤解决了这个问题:
然后Excel,Word和其他应用程序可以正常工作,祝你好运。
答案 1 :(得分:39)
这对我有用:
DCOMCNFG
mmc comexp.msc /32
而不是Darkseal here)DCOMCNFG
答案 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位系统上试试这个:
之后
答案 5 :(得分:0)
除了上述内容外,我还遇到了一个我想分享的问题,以防其他人也遇到它。
使用互操作性的.net应用程序的应用程序池用户已添加到Admin中,但由于iis缓存环境而没有生效。除了执行iisreset以反映应用程序池用户的正确管理状态之外,还执行了上述操作之后,一切正常。