检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 当在ASP.NET应用程序中引用Microsoft Excel组件,并在程序中调用时,部署到服务器上经常会遇到以下的错误: Administrator System Interactive 而当你访问的ASP.NET应用程序实际是以ASP.NET或Network Service群组帐户执行的。 选择开始菜单->执行 输入"dcomcnfg"并按回车键 这时会看到“元件服务"MMC界面(也可通过 控制面板->系统管理工具->元件服务进入) 展开到 元件服务->电脑->我的电脑->DCOM设定 右键""Microsoft Excel Application"并选择 属性,进入属性设定界面 选择如下的“安全性(Security)”设定选项卡 在“启动和启用权限(Launch and Activation Permissions)"中选择"自订(Customize)" 按右边的“编辑(Edit)",可看到如下画面 WINDOWS XP
点击"新增(add)"如下界面 点击"位置(Locations)"选择本地计算机,如下面的"CCROWE"
如果是Windows XP,在下面的对话框中输入"ASPNET"帐号名称,如果是Windows 2003 Server,必须要输入应用程序池(Application Pool)的运行帐号,默认是"Network Service" WINDOWS XP 按"确定(OK)" 确保所选择的帐号(window xp是ASPNET,windows 2003 server是应用程序池的标识帐号,默认为network service)选上了以下权限: 本地启动(local launch) : 允许(allow) 按下"确定(OK)",看看现在你的web应用程序是否能工作正常了^^ 注意:如果你是部署到windows 2003 server上,必须添加设定应用程序池(Application pool)的标识帐号而不是ASPNET帐号
解决方案: 配置 DCOM 中 word 应用程序: 1,增加虚拟权限: 在web.config里面增加 <identity impersonate="true" userName="windowsloginid" password="password"/>的键值;要求windowsloginid具有管理员权限,这种方案使用后确实可行,可是不利于部署,因为有经验的人都知道把一个最高权限的服务器帐号密码公开显示在配置文件上有什么后果。所以这种方案不可行。那么就牵涉到第二种方案。 2,增加Com组件的交互式访问权限: 这也是网上搜索率最高的一种方式,运行“DCOMCNFG”,找到 Microsoft Excel 97/2000/2002 - Microsoft Excel 应用程序 http://support.microsoft.com/kb/288366 这种方案应该是可行的,可是我在我自己的机器上一级服务器上试验过很多遍都不行,最后我试着用特定的用户来访问,如果细分的话,这里可以算为第三种解决方案了^_^ 3,增加Com组件特定用户的访问权限。 这才是我今天说的重点,也是帮我解决了实际难题的一重解决方案,简略的说可以这么做: 建立一个所需的帐号(例如test),权限为Power User或者User; 用此帐号运行一次word或者excel(确保有访问权限); 运行DCOMCNFG,在Dcom组件里面找到Microsoft Excel 应用程序或者Microsoft Word 文档(和前面一样)-属性-标识里面选择“特定用户”,然后输入前面建立的帐号和密码就可以了
请确认server服务已经启动 |