前一阵子做开发需要用到Excel和Word编程,本人用的是2003系统,开发环境是VS2008和Office2007,测试无任何问题,可是到部署的时候出现了一些令人很头痛的问题,老是会出现例如:检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 8000401a。 的错误.
在网上查询了许多资料,大多是二种解决方案:
1,增加虚拟权限: 在web.config里面增加的键值;要求windowsloginid具有管理员权限,这种方案使用后确实可行,可是不利于部署,因为有经验的人都知道把一个最高权限的服务器帐号密码公开显示在配置文件上有什么后果。所以这种方案不可行。那么就牵涉到第二种方案。
2,增加Com组件的交互式访问权限: 这也是网上搜索率最高的一种方式,运行“DCOMCNFG”,找到 Microsoft Excel 97/2000/2002 - Microsoft Excel 应用程序 Microsoft Word 2000/2002 - Microsoft Word 文档
这些组件的交互式访问权限,详情可以参见: http://support.microsoft.com/kb/288366 这种方案应该是可行的,可是我在我自己的机器上一级服务器上试验过很多遍都不行,最后我试着用特定的用户来访问,如果细分的话,这里可以算为第三种解决方案了^_^
3,增加Com组件特定用户的访问权限。 这才是我今天说的重点,也是帮我解决了实际难题的一重解决方案,简略的说可以这么做:建立一个所需的帐号(例如test),权限为Power User或者User; 用此帐号运行一次word或者excel(确保有访问权限); 运行DCOMCNFG,在Dcom组件里面找到Microsoft Excel 应用程序或者Microsoft Word 文档(和前面一样)-属性-标识里面选择“特定用户”,然后输入前面建立的帐号和密码就可以了增加组件访问权限在有的机器上测试还需要在前面的安全标签里面添加这个账号的启用和访问权限.当然直接用自己登陆的帐好也是可行的
4. 终极办法,将第三条和第一条结合,用户对应。效果100%
在web.config中使用身份模拟,在<system.web>节中加入: 在web.config中使用身份模拟,在<system.web>节中加入: