后端

.NET调用OFFICE COM组件的原理及问题

csxiaoyao · 10月25日 · 2016年 本文1953字 · 阅读5分钟15

.NET调用OFFICE COM组件的原理及问题

Write By CS逍遥剑仙
我的主页: csxiaoyao.com
GitHub: github.com/csxiaoyaojianxian
Email: sunjianfeng@csxiaoyao.com
QQ: 1724338257

.Net调用Office Com组件的原理及问题:检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败

最近在本地64位win10操作系统+vs2015+office2010(卸载了2016,因为高版本反而不支持),做PPT文档的解析成HTML,在部署到windows server 2012上的时候遇到了不少麻烦,恰好见到两篇文章,得以解决。

文章1链接:http://www.cnblogs.com/xuxin-1989/p/3941056.html
文章2链接:http://www.cnblogs.com/yumianhu/p/3710733.html

现将文章整理如下:

最开始报错:

  1. Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B} failed due to the following error: 80040154 没有注册类 (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
    最开始想到的原因,我的服务器有好几个虚机,其中有好使的,这个不好使难道是因为Excel和ppt是单独安装的,office装的不全,组件没注册上?
    在网上(http://support.microsoft.com/kb/828550/zh-cn)查到CLSID 为{91493441-5A91-11CF-8700-00AA0060263B}的组件是office的这个服务owerPoint.Application ,我想既然报错没注册,那就注册吧,在网上找的资料都说要通过C:WindowsSysWOW64 regsvr32注册组件,费了很大的劲也没弄明白要注册哪个dll,最后卸载office,重新安装,报错
  2. Retrieving the COM class factory for component with CLSID {91493441-5A91-11CF-8700-00AA0060263B} failed due to the following error: 80070005 拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
    再接着在网上查资料,说卸载的不干净,要把注册表也删除,好吧,再接再厉重新安装,还是报(2)错,想着是拒绝访问,那是缺少权限啊,根据网上的各种配置权限,还是报错,改变方向,网上(http://edu.cnzz.cn/200810/6270283a.shtml)找到原因可能是在Windows Server 2008 X64中通过.NET程序调用32位com组件的问题,按照其说的,在Visual Studio中,将编译的目标平台(Platform target)设置为:X86,然后重新统计发布项目,错误依旧。
    最后终于发现问题,DCOM配置中一直配置的是【Microsoft Office PowerPoint 预览器】 原来一直都配置错地方了,可是DCOM中也没有【Microsoft Office PowerPoint 幻灯片】啊,原来服务器是64位了,没有加载32位的组件,运行中敲入mmc -32,在控制台中‘文件’‘添加/删除管理单元’选择‘组件服务’添加,就会出现【Microsoft Office PowerPoint 幻灯片】,再把一些权限配置上就搞定了。

总结如下:

.net调用office组件进行Excel、Word、ppt的一些操作,需要做一下操作:

  1. 正确全面的安装office
  2. DCOM配置权限(64位系统要添加32位组件【mmc -32】)
    (1) 开始-运行-dcomcnfg,启动组件服务。
    (2) 找到Microsoft Excel Application、Microsoft Office PowerPoint 幻灯片、Microsoft Office Word 97 – 2003 文档,-属性 -安全-中所有配置都选择“自定义”,添加用户(SYSTEM、INTERACTIVE、Everyone、Administrators、Administrator、IIS-IUSRS()、Network Services、Network 、USERS),添加“启动和激活权限”、“访问权限”,并赋予本地启动和激活;-标识,交互式用户(不能选择启动用户,会无法结束进程)

.NET调用OFFICE COM组件的原理及问题-禅林阆苑

0 条回应

×