检索 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. 解决Office互操作错误检索COML类工厂中 CLSID为 {xxx}的组件时失败,原因是出现以下错误: 80070005...

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

  2. 检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下:...

    检索 COM 类工厂中 CLSID 为 {10020200-E260-11CF-AE68-00AA004A34D5} 的组件时失败,解决方法如下: 第 一步:首先将msvcr71.dll,  SQLD ...

  3. 检索 COM 类工厂中 CLSID 为 { } 的组件时失败,原因是呈现以下错误: 80040154

    检索 COM 类工厂中 CLSID 为 { } 的组件时失败,原因是呈现以下错误: 80040154 首先是要确认被调用com是否注册,如果没有注册,需要用管理员身份运行cmd, 进行 regsvr3 ...

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

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

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

    使用以上方法必须对dcom进行配置,给用户使用office的权限. 具体配置方法如下: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行& ...

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

    检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005和和8000401a 具体解决方 ...

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

    使用以上方法必须对dcom进行配置,给用户使用office的权限. 具体配置方法如下: 1:在服务器上安装office的Excel软件. 2:在"开始"->"运行& ...

  8. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问...

    检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问 已重装office2 ...

  9. 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开

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

最新文章

  1. ELK教程1:ElasticSearch集群的部署
  2. (转)linux下cp目录时排除一个或者多个目录的实现方法
  3. 收入最高的 24 个开发人员职位
  4. 用批处理编译*.sln工程(转)
  5. mysql中的函数有哪些?(2.控制流函数)
  6. c++读取utf8文件_Node.js 进阶之 fs 文件模块学习
  7. kafka图形化管理工具kafka-manager
  8. MySQL Replication主主复制—(实例)
  9. 一种机器人语音识别系统及其工作方法与流程
  10. 在小公司待了3年后,我废了
  11. jQuery实现点击行(tr)选中某列中CheckBox
  12. py+webdriver学习之旅6:cookie
  13. jieba 中文分词使用教程
  14. 用Python绘制标准时钟
  15. c语言中eof的作用,eof在c语言中表示什么
  16. 【小记】LaTex 语法说明
  17. 对c++输入输出的一些封装(bushi)
  18. 云计算已渗透大众生活,去中心化云计算发展前景广阔
  19. ibm服务器型号规则,IBM服务器型号是怎么命名的?
  20. 什么是冲突域?如何解决冲突?

热门文章

  1. Java中的AutoBoxing (Integer对-128~127之间数值的特殊处理)
  2. Oracle Execute Plan原理分析与实例分享之一
  3. 云端卫士DDoS防护解决方案助力互联网金融安全
  4. 编程之法:面试和算法心得
  5. 多线程:为什么不能override start方法
  6. VMWare克隆出多个操作系统
  7. 网线的制作方法和千兆网线的施工注意事项
  8. 第二讲 完全背包问题(对背包九讲的学习)
  9. 文件服务器:共享文件夹的移动和权限设置备份2012-04-28
  10. Kafka文件存储机制及offset存取