检索COM 类工厂中CLSID 为{00024500-0000-0000-C000-000000000046}组件时失败
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005
当在ASP.NET应用程序中引用Microsoft Excel组件,并在程序中调用时,部署到服务器上经常会遇到以下的错误:
检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005
问题的原因是Microsoft Excel作为一个COM组件默认只能被以下帐户激活:
- Administrator
- System
- Interactive
而当你访问的ASP.NET应用程序实际是以ASP.NET或Network Service群组帐户执行的。
解决问题的方法就是使用具有权限的帐号去执行ASP.NET应用程序,一般方法有两种:
1、第一种方法比较简单,只要为ASP.NET应用程序专门分配一个帐户,并保证该帐户在本地登陆时能正常的使用MICROSOFT Excel,然后在web.config文件的<system.web>节下加上以下设置,就能使程序能正常运行。
<identity impersonate ="true" userName="账号" password="密码"/>
2、第二种方法就是要配置DCOM,使ASP.NET帐号能有权限调用Excel COM组件,下面分不同的系统说明配置方法。
- 选择开始菜单->执行
- 输入"dcomcnfg"并按回车键
- 这时会看到“元件服务"MMC界面(也可通过 控制面板->系统管理工具->元件服务进入)
- 展开到 元件服务->电脑->我的电脑->DCOM设定
- 右键""Microsoft Excel Application"并选择 属性,进入属性设定界面
- 选择如下的“安全性(Security)”设定选项卡

- 在“启动和启用权限(Launch and Activation Permissions)"中选择"自订(Customize)"
- 按右边的“编辑(Edit)",可看到如下画面
WINDOWS XP
WINDOWS 2003
- 点击"新增(add)"如下界面
- 点击"位置(Locations)"选择本地计算机,如下面的"CCROWE"


- 如果是Windows XP,在下面的对话框中输入"ASPNET"帐号名称,如果是Windows 2003 Server,必须要输入应用程序池(Application Pool)的运行帐号,默认是"Network Service"
WINDOWS XP
注意:最快捷的方式是直接输入电脑名称和帐号像如下格式:CCROWE\ASPNET
WINDOWS 2003 SERVER

- 按"确定(OK)"
- 确保所选择的帐号(window xp是ASPNET,windows 2003 server是应用程序池的标识帐号,默认为network service)选上了以下权限:
本地启动(local launch) : 允许(allow)
远端启动(Remote launch) : 空白(blank)
本机启用(Local Activation) : 允许(allow)
远端启用(Remote Activation) : 空白(blank)
设定后如下所示:
WINDOWS XP
WINDOWS 2003 SERVER
- 按下"确定(OK)",看看现在你的web应用程序是否能工作正常了^^
注意:如果你是部署到windows 2003 server上,必须添加设定应用程序池(Application pool)的标识帐号而不是ASPNET帐号
解决方案: 配置 DCOM 中 word 应用程序:
在window server 2003下设置 Office 自动化服务器,请按照下列步骤操作:
1. 以管理员身份登录到计算机,安装Office2003。
2. 启动要自动运行的 Office 应用程序。这会强制该应用程序进行自我注册。
3. 单击开始,单击运行,然后键入 DCOMCNFG。选择要自动运行的应用程序。应用程序名称如下所示:
Microsoft Word 文档
单击属性打开此应用程序的属性对话框
4. 单击标识选项卡,然后选择交互式用户。
5. 在 DCOM 配置对话框中,单击默认安全性选项卡。
6. 单击"启动和激活权限"和访问权限的"自定义"。验证访问权限中是否列出下列用户,如果没有列出,
则添加这些用户:
SYSTEM
INTERACTIVE
Administrators
IUSR_<machinename>*
IWAM_<machinename>*
NETWORK SERVICE
后三个需要添加"本地激活"权限.
7. 单击确定关闭 DCOMCNFG。
1,增加虚拟权限:
在web.config里面增加
<identity impersonate="true" userName="windowsloginid" password="password"/>的键值;要求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 文档(和前面一样)-属性-标识里面选择“特定用户”,然后输入前面建立的帐号和密码就可以了
请确认server服务已经启动
检索COM 类工厂中CLSID 为{00024500-0000-0000-C000-000000000046}组件时失败的更多相关文章
- "检索COM类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005" 问题的解决
一.故障环境 Windows 2008 .net 3.0 二.故障描述 调用excel组件生成excel文档时页面报错.报错内容一大串,核心是"检索COM类工厂中 CLSID为 {000 ...
- 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 在CSDN上总是有网友问这个 ...
- [备忘]检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败解决方法
检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败,原因是出现以下错误: 80070005 在CSDN上总是有网友问这个 ...
- 检索 COM 类工厂中 CLSID 解决办法
我的服务器:windows server 2008(64位)+microsoft office 2007 企业版+windows服务应用程序 业务:调用msdn提供的SaveAsPDFandXPS.e ...
- 解决Office互操作错误"检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005"
Excel为例(其他如Word也适用)文件数据导入时报出以下错误: 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是 ...
- 检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRE ...
- 【原创】asp.net导出word 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a
我的服务器:windows server 2008(64位)+microsoft office 2007 企业版 业务:网站导出应聘word简历. 出现以下错误: 检索 COM 类工厂中 CLSID ...
- C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005
解决办法一:<转自http://www.cnblogs.com/Sue_/articles/2123372.html> 具体解决方法如下: 1:在服务器上安装office的Excel软件. ...
- (原创)解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005"
最近在.net中处理Excel文件数据导入时报出以下错误: 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下 ...
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败
.NET导出Excel遇到的80070005错误的解决方法: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出 ...
随机推荐
- leetcode_day02
任务二:删除排序数组中的重复项 原文链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/ 最开始的解决思路: ...
- Linux中awk后面的RS, ORS, FS, OFS 含义
转载自http://blog.csdn.net/qq416647781/article/details/40649419 一.RS 与 ORS 差在哪 我们经常会说,awk是基于行列操作文本的 ...
- Web 安全概念
Web 安全概念 Web 应用中存在很多安全风险,这些风险会被黑客利用,轻则篡改网页内容,重则窃取网站内部数据,更为严重的则是在网页中植入恶意代码,使得用户受到侵害.常见的安全漏洞如下: XSS 攻击 ...
- Java API操作ZooKeeper
创建会话 package org.zln.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watch ...
- 点对点协议(Point-to-Point Protocol)
简介 点对点协议简称PPP协议,工作在数据链路层.设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机. 网桥和路由器之间简单连接的一种共通的解决方案. PPP协议的组成 建立 ...
- hdu 1535 Invitation Cards (最短路径)
Invitation Cards Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
- Using Let’s Encrypt for free SSL Certs with Netscaler
Using Let’s Encrypt for free SSL Certs with Netscaler If you haven’t heard, Let’s Encrypt (https://l ...
- hdu 1142 最短路+记忆化
最短路+记忆化搜索HDU 1142 A Walk Through the Forest链接:http://acm.hdu.edu.cn/showproblem.php?pid=1142 > 题意 ...
- angular.extend(dst,src)的简单示例
自我认为这个方法跟angular.copy(src,dst)有点相似.在angular.extend({},src)时,就可以画等号.这个src只代表一个对象.代码如下:(注意这个src可以有多个对象 ...
- CodeWarrior的map文件详解
前言 map文件保存了你的整个程序编译链接后的各种信息,包括编译器链接器信息,内存分配信息,对象依赖等,每次编译链接程序后,这个文件都会被覆盖重新生成. 对我来说,它最主要的作用是它详尽的描述了整个程 ...