C#使用Office功能80070005错误的处理方法

经历:

1.尝试LocalSystem的方法,权限问题会被解决,但代码会在Documents.Add发生错误,未知原因

2.尝试DCOM配置方法完美解决问题

 

C#使用Office功能
在C#经常会用到office的功能,例如使用excel计算功能和生成word文件等。这些功能用代码实现很简单,在本地运行调试运行成功,一旦发布到服务器上这些功能可能会出现各式各样的问题,一般情况下会报“错误代码就是80070005(检索COM类工厂中CLSID为{000209FF-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005)”这样的错误,怎么回事呢?
归根到底就是服务器上office访问权限的问题。
解决方法很简单:
1.一般情况下服务器Office权限应该是配置好的,Office安装完成就设置了这些(但安装要确保选择了为asp.net提供支持),那么解决方法简单了,设置网站应用池的标识即可,标识选择LocalSystem:
C#使用Office功能80070005错误的处理方法
Ps:一般是可以设为LocalSystem或者NetworkService两种用户的,但如果先执行这步那么只可以设置LocalSystem,走过2、3步的之后即可两种用户都可设置。
2.如果这种方式没有解决,就要进入第二步:
1)..在”开始”->”运行”中输入dcomcnfg.exe启动”组件服务”
2).依次双击”组件服务”->”计算机”->”我的电脑”->”DCOM配置”
3).在”DCOM配置”中找到”Microsoft Excel 应用程序”,在它上面点击右键,然后点击”属性”,弹出”Microsoft Excel 应用程序属性”对话框
4).点击”标识”标签,选择”交互式用户”
5).点击”安全”标签,在”启动和**权限”上点击”自定义”,然后点击对应的”编辑”按钮,在弹出的”安全性”对话框中填加一个”NETWORK SERVICE”用户(注意要选择本计算机名或亦可添加其他需求的用户比如Everone用户等),并给它赋予”本地启动”和”本地**”权限
6).依然是”安全”标签,在”访问权限”上点击”自定义”,然后点击”编辑”,在弹出的”安全性”对话框中也填加一个”NETWORK SERVICE”用户(或亦可添加其他需求的用户比如Everone用户等),然后赋予”本地访问”权限.
7).之后重复第1步操作。
3.有些服务器是64位版本的,因此打开DCOMCNFG之后,找不到项“Microsoft Excel 应用程序”,因为DCOMcnfg是32配置,在64位系统下能完全被支持,打开32位的DCOMCNFG的方式:
1).运行:mmc -32
2).打开“文件”-“添加或删除管理单元”-选择组件服务-点击添加-确定。
3).可以在DCOM组件中找到Microsoft Excel Application了。
4).之后重复第2步,第1步。

到此,问题基本解决,功能可以正常使用了。建议将office版本升级到最新,因为最新版本的office对功能支持的更完善,一些计算上缺陷已经修复。