C#写的COM组件注册问题兼论微软Regasm注册的BUG

本文详细介绍了使用C#编写的一个无需Office环境即可读写Excel的COM组件在注册过程中遇到的问题。文章指出,使用`regasm /u`命令有时无法有效卸载组件,导致版本升级时出现冲突。作者提供了通过直接删除注册表项来解决问题的方法,并给出了相应的C#控制台程序代码示例,以帮助开发者在更新COM组件时避免此类问题。
摘要由CSDN通过智能技术生成

      工作中自己用C#写了专门读写EXCEL(不需要OFFICE环境,直接读原始文件,速度快)的COM组件,在使用过程中,发现原先的注册程序是有问题的。网上也有同样的网友碰到这个问题,但都没找到合适的解决办法。现在我把问题和解决方法都写出来,供读者参考。

 

      其实问题都是出在COM组件的注册上,根本的原因就是REGASM /u 命令有些时候是无效的! 我这边提供的注册过程是先卸载,然后注册。原先的注册过程是: (1) regasm /u XLSRW.dll   (2) regasm XLSRW.dll (/codebase)   实际上,上述反注册命令是有问题的,具体例子如下:             (XLSRW.dll 的CLSID 是61D993F1-CB5E-444d-BB3D-EB2BEA4ACB8D)

 

上图中我分别用上面的过程注册了1.0.0.2和1.0.0.3版本,然后发现用1.0.0.2版本的XLSRW.dll再注册使用是无效的,因为程序默认仍然去找1.0.0.3版本的XLSRW.dll(因为注册表项中仍然存在1.0.0.3项)。程序搜索XLSRW.dll的过程是先查找注册时的路径下的XLSRW.dll,如果发现版本不对或者没有,就在程序的当前路径下寻找,找到后就加载该DLL。这无疑对COM组件的版本升级带来了灾难。

     解决该问题的办法是修改COM的注册过程,直接删除COM组件对应的注册表项(COM组件的注册路径都为 HKEY_CLASSES_ROOT/CLSID 下):

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值