zoukankan      html  css  js  c++  java
  • 检索COM类工厂中CLSID为{0002450000000000C000000000000046}的组件时失败

    今天发布了一个Web项目,项目中使用到了Excel组件,结果在开发的网站中导出Excel时,出现了问题:
    检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。

    有时错误信息可能是:

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


    跟踪了一下,结果是将记录导出为Excel表时Excel的COM组件出错,但在开发环境中运行却没有任何问题,因此得出结论,肯定是权限问题,查了下资料,问题解决。    

    具体解决方法如下:

    1:在服务器上安装office的Excel软件, 同时在服务器上添加一个帐号,并设置所属于Administraotrs、Power User或者User

    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"

    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"

    4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应

    用程序属性"对话框

    5:点击"标识"标签,选择"特定用户", 然后输入前面建立的帐号和密码就可以了.

    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.

    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK SERVICE"用户,然后赋予"本地访问"权限.

    这样,我们便配置好了相应的Excel的DCOM权限.

    注意:这是在WIN2003上配置的,在2000,xp上,NETWORK SERVICE用户改为ASP.net用户。(若此账号不能解决问题,请添加everyone用户)

    最后,在站点的web.config配置文件的<system.web>里添加一个支点〈identity userName="xxx" password="xxx" /〉即可(userName、Passwors, 是我们之间创建的账号)


    (基本上按1-7步操作就能解决问题)
    -----------------------------------------------------------------------------------------------------------------
    8.采用第5点的"特定用户"设置后,打开Excel可能会出现“无法使用对象引用或链接”,并且不能进行单元格粘贴。原因不明,取消设置后即可消失。  

    另外说明:光按以上设置并不能完全保证不出问题,因为调用OFFICE的操作可能涉及其他的系统资源,很可能依然权限不够而导致问题,只是设置EXCEL应用程序后,还是可能会报80070005的错误,最保险的是应该在dcomcnfg中选中我的电脑然后右键属性->com安全,将里面的访问权限,启动和激活权限全都编辑默认,在当中加上network service(iis 5.0的话,要加的是asp.net用户),并如前面对networkservice设置上相同的权限,这样基本上能保证不会再出什么问题。

    以上为基本出路方法,但是我也遇到过应用以上方法还是报错的情况,我的环境是windows2003 + office2003+office2007,在测试服务器上都可以导出无任何问题!但是更新了正式环境就是报错,权限都设置了还是报错,因为我的测试服务器是默认office启动的,所以我怀疑是office版本环境问题!于是我卸载了office2007,马上测试ok了,但是重启服务器后就产生了have not been Pre-compiled错误,导出页面都无法打开了,于是我又重新安装了office2007,页面可以打开了,但是导出excel时又开始报错!我又把所有的权限重新设置一遍,问题依旧!后来发现两个服务器默认打开excel的程序不一样,测试环境是默认office2003打开,正式环境是office2007打开,于是我在正式环境重新注册office2003,使其同样也是默认office2003打开程序,靠!问题终于解决了!!!

    注册方法 执行    开始----运行----输入excel2003的安装路径,例如 "C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver    注意/符号前面有一个空格,其中"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" 是excel2003的安装程序的路径,参数regserver表示注册的意思!
    运行后,会启动Office 2003的安装程序,进行修复,重新注册。
    excel2007为默认的启动程序的方法类同,可以执行   开始----运行----"D:\Program Files\Microsoft Office\Office12\excel.exe" /regserver
               综上所述,再遇到Excel导出、导入问题时,先考虑权限问题,再考虑office的版本环境!如此基本能够解决这些问题了
    原文地址:http://www.cnblogs.com/andy1016/archive/2010/02/21/1670498.html

    ----------------------------------------------------------------------------------------------------------------- 

    而问题出在64位版本的机器上,可能打开DCOMCNFG之后,找不到项“Microsoft Excel 应用程序”,因为DCOMcnfg是32配置,在64位系统下能完全被支持,所以正好挂彩。

      于是查阅到了打开32位的DCOMCNFG的方式:

      1.运行:mmc -32

      2.打开“文件”-“添加或删除管理单元”-选择组件服务-点击添加-确定。

      3.可以在DCOM组件中找到Microsoft Excel Application了。

     

      有时,可能用最上面的方式配置完成,跑网站,一样出错。

      再检查,还有内容没有完成设置。

      检查IIS7的设置,最后确定还需要设置应用程序池的标识,把此网站的AppPool的标识要设置为LocalSystem或者NetworkService,问题解决。

    原文地址: http://www.cnblogs.com/petitprince/archive/2010/08/20/1804360.html

  • 相关阅读:
    easyUI combobox下拉框很长,easyUI combobox下拉框如何显示滚动条的解决方法
    一步步实现 easyui datagrid表格宽度自适应,效果非常好
    javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
    javascript数据结构与算法--二叉树遍历(后序)
    javascript数据结构与算法--二叉树遍历(先序)
    javascript数据结构与算法--二叉树遍历(中序)
    javascript数据结构与算法--二叉树(插入节点、生成二叉树)
    散列表,散列函数,碰撞处理解决:线性探测法
    thinkphp5 Windows下用Composer引入官方GitHub扩展包
    thinkphp5.0开发规范
  • 原文地址:https://www.cnblogs.com/linyechengwei/p/1750516.html
Copyright © 2011-2022 走看看