检索 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.NETNetwork 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}组件时失败的更多相关文章

  1. "检索COM类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005" 问题的解决

    一.故障环境 Windows 2008 .net 3.0 二.故障描述 ​ 调用excel组件生成excel文档时页面报错.报错内容一大串,核心是"检索COM类工厂中 CLSID为 {000 ...

  2. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005

    检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005 在CSDN上总是有网友问这个 ...

  3. [备忘]检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败解决方法

    检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败,原因是出现以下错误: 80070005 在CSDN上总是有网友问这个 ...

  4. 检索 COM 类工厂中 CLSID 解决办法

    我的服务器:windows server 2008(64位)+microsoft office 2007 企业版+windows服务应用程序 业务:调用msdn提供的SaveAsPDFandXPS.e ...

  5. 解决Office互操作错误"检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005"

    Excel为例(其他如Word也适用)文件数据导入时报出以下错误: 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是 ...

  6. 检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。

    检索 COM 类工厂中 CLSID 为 {820280E0-8ADA-4582-A1D9-960A83CE8BB5} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRE ...

  7. 【原创】asp.net导出word 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a

    我的服务器:windows server 2008(64位)+microsoft office 2007 企业版 业务:网站导出应聘word简历. 出现以下错误: 检索 COM 类工厂中 CLSID ...

  8. C#操作word或excel及水晶报表,检索 COM 类工厂中 CLSID 为 {} 的组件时失败,原因是出现以下错误: 80070005

    解决办法一:<转自http://www.cnblogs.com/Sue_/articles/2123372.html> 具体解决方法如下: 1:在服务器上安装office的Excel软件. ...

  9. (原创)解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误: 80070005"

    最近在.net中处理Excel文件数据导入时报出以下错误: 检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下 ...

  10. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败

    .NET导出Excel遇到的80070005错误的解决方法: 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046}的组件时失败,原因是出 ...

随机推荐

  1. [译]在python中如何有效的比较两个无序的列表是否包含完全同样的元素(不是set)?

    原文来源: https://stackoverflow.com/questions/7828867/how-to-efficiently-compare-two-unordered-lists-not ...

  2. 第二阶段团队冲刺-one

    今天打算做什么: 处理第一次启动服务器500的问题.

  3. WinDbg分析dump文件排查bug

    文章:WinDbg-如何抓取dump文件 命令: cd C:\Windows\System32\inetsrv appcmd list wp 可以查看各个站点的pid

  4. 【Android】实验5 数独游戏界面设计-报告提交时间:2016.4.15

  5. 【bzoj2969】矩形粉刷 期望

    题目描述 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩 ...

  6. GYM - 101147 K.Touristic Trip

    题意: 一个人从城市0开始旅行.一共有N座城市,他每到一座城市都会寄一张明信片.给出从一座城市到另一座城市的概率和在每座城市寄出每张明信片的概率.给出长度为k的寄明信片的序列.问在该序列的条件下在第Z ...

  7. BZOJ1004 [HNOI2008]Cards 【burnside定理 + 01背包】

    题目链接 BZOJ1004 题解 burnside定理 在\(m\)个置换下本质不同的染色方案数,等于每种置换下不变的方案数的平均数 记\(L\)为本质不同的染色方案数,\(m\)为置换数,\(f(i ...

  8. BZOJ1079 [SCOI2008]着色方案 【dp记忆化搜索】

    题目 有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块. 所有油漆刚好足够涂满所有木块,即c1+c2+-+ck=n.相邻两个木块涂相同色显得很难看 ...

  9. BZOJ2875 [Noi2012]随机数生成器 【矩阵乘法 + 快速乘】

    题目 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Me thod)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a, ...

  10. BZOJ2879 [Noi2012]美食节 【费用流】

    题目 CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽管所有的菜品都很可 ...