在.NET环境下,使用word组件进行word操作,实现word的读取、导出、操作书签等操作时,很麻烦,而且在不同环境下面使用,会有意想不到的兼容性问题。
最近遇到的就是:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))。尝试了各种解决方案,最后的方案最简单奏效,在此记录一下解决过程:
方案一:
看到COM类的组件,以为是Word的组件的权限问题,就查找各种COM组件权限设置的方法,反正我设置这个是没有起作用:
- 运行"中输入dcomcnfg.exe启动"组件服务",然后在“组件服务”中 依次找到 "组件服务"->"计算机"->"我的电脑"->"DCOM配置"。
- 在"DCOM配置"中找到"Microsoft Office Word 97 - 2003 文档",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应用程序属性"对话框。
- 如果环境是 Windows 2008 R2可能找不到"Microsoft Office Word 97 - 2003 文档"。你可以 运行mmc -32 ,然后会弹出一个程序,在菜单中选择添加/删除管理单元 添加Component Services,然后在Component Services下找到word后再进行以下的配置。(组件缓存目录 c:\windows\as sembly)。 (不知道别人是不是在操作这步是否找到word 反正我是我没有找到)
- 在"标识"标签,选择"交互式用户"。
- 在"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.。
- 在"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限 。
方案二:
修改IIS的应用程序池,选择你的项目,点击高级设置,标识改为:LocalSystem 或NetworkServer。这个方案起作用。