仰天一笑(Ansonxuyu),专业从事软件定制开发、Web软件开发,网站建设,网络推广,APP开发,微博应用开发,微信应用开发,电子商务开发,物联网开发等技术。
互联网8年风雨,愿在此交朋识友,交流心得,分享技术知识(策划/研发/运营/推广/合作)!QQ:943530498


仰天一笑

昨日不悔,今日勿失,明日莫忧! —徐羽

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  340 随笔 :: 27 文章 :: 1088 评论 :: 237万 阅读

最近因为项目的需要写了一个应用,目的是在B/S架构下实现数据从Excel文档中载入到数据库。在本地开发的时候一切正常,当部署到测试环境下运行的时候出现如下的错误:“检索 COM 类工厂中 CLSID {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005”。

这是最简单的一种问题,我一看这个错误就知道是属于组件配置的范畴,可是我没有想到这个问题解决了以后更让我郁闷的事情还在后面

         先说一下“错误80070005”怎么解决(前提是Office2007必须正确安装),解决的办法很简单,就是改配置,在命令行中输入dcomcnfg.exe,在“组件服务-我的电脑-找到Microsoft Excel应用程序(在某些版本下会显示Microsoft Excel Application)这一项对其进行配置,步骤如下:

1.       以管理员身份登录到计算机,并使用完整安装来安装(或重新安装)Office。为了实现系统的可靠性,建议您将 Office CD-ROM 中的内容复制到本地驱动器并从此位置安装 Office

2. 启动要自动运行的 Office 应用程序。这会强制该应用程序进行自我注册。

3. 单击安全选项卡。验证使用默认的访问权限和使用默认的启动权限已选中。

4. 单击确定,关闭属性对话框并返回主应用程序列表对话框。

5. DCOM 配置对话框中,单击默认安全性选项卡。

6. 单击访问权限的编辑默认值。验证访问权限中是否列出下列用户,如果没有列出,则添加这些用户:

SYSTEM

INTERACTIVE

Everyone

Administrators

IUSR_<machinename>*

IWAM_<machinename>*

Network Services

ASPNET

* 这些帐户仅在计算机上安装了 Internet Information Server (IIS) 的情况下才存在。

7. 确保允许每个用户访问,然后单击确定。

8. 单击启动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户:

SYSTEM

INTERACTIVE

Everyone

Administrators

IUSR_<machinename>*

IWAM_<machinename>*

Network Services

ASPNET

* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。

9. 确保允许每个用户访问,然后单击确定。

10. 单击确定关闭 DCOMCNFG

         这样配置一番以后再运行OK,于是我的心情很晴朗(我行,我不是一般人)。可是过了一段时候,产品组又说Excel的数据载入功能又不能用了,我运行一番竟然还是这个错误“检索 COM 类工厂中 CLSID {00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005”。我打开DCOM配置查看,发现和我上一回的配置是完全一样的没有做任何改动,可是运行还是会出现这个错误,我就郁闷了。于是我到网上遍查资料,结果没有一个可以用的,他们出现的问题,都是我曾经解决过的。

        

        

        于是在DCOM中我打开Microsoft Excel Application重新进行设置,在“标识”标签里选择“下列用户”进行运行。因为我听说这台服务器已经加入域,并且域名是Nanjing.com.cn,于是我就尝试使用nanjing"administrator来运行。

关机,重启,重新运行程序,80070005这个错误终于不出现了,可是出现了一个更要命的错误。“Microsoft.Office.Interop.Excel.ApplicationClass” COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID “{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))

      如果是出现这种错误就很可能是我的组件有问题,要知道那是一个超级复杂的组件,类图就用了很多篇幅。我打开代码仔细的检查,在别人的环境上运行,还是没有问题,我把代码全部屏蔽,只留了一条调用Excel组件的语句,又运行还是报这个错误。
   最后只能重新安装Office组件,再试成功了。

     当出现类似问题的时候,
      1,检查Office组件安装成功否。
      2,如果是在B/S构架下进行访问请先给Office组件分配合理的权限(Network Services),如果在域环境下还要考虑域权限。     
      3,要有自信,找出问题的原因,如果怀疑是自己的代码,可以只留几条调用Excel组件的语句,如果还是报错那肯定就是环境问题。
      4,我使用的名字空间是Microsoft.Office.Interop.Excel;

posted on   仰天一笑  阅读(3033)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2006-03-17 C#和Sql的时间操作心得(一)
2006-03-17 读写文件之日志文件
2006-03-17 DataGrid中DropDownList的动态绑定和触发DropDownList事件
点击右上角即可分享
微信分享提示