`
qsbj84qsbj
  • 浏览: 13398 次
社区版块
存档分类
最新评论

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

阅读更多

  有时间的话,我会写些(1) 关于QT写GIS项目的文章(QT版本用的是QT3) ,(2)VC操纵Google Earth(包括移动通信测试的信息上传到GE上去),具体的项目可以去google 搜下getools(对应的百度文档) ,(3)关于怎么实现无OFFICE环境读写EXCEL(5.0~2007) , (4) CMarkup类的改造(用于读写XML) 等等。
  工作中自己用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 下):
  (1) REG DELETE  "HKEY_CLASSES_ROOT\CLSID\{61D993F1-CB5E-444D-BB3D- EB2BEA4ACB8D}"  /f
  (2) REGASM XLSRW.dll /codebase 
  写成控制台程序的代码如下:(main.c)
  #include 
  void main()
  {
  WinExec( "REG DELETE  \"HKEY_CLASSES_ROOT\\CLSID\\{61D993F1-CB5E-444D-BB 3D-EB2BEA4ACB8D}  \" /f",SW_HIDE);
  Sleep(100);
  WinExec( "Regasm XLSRW.dll /codebase ",SW_HIDE);
  }
  至此,问题已经得到了解决。 读者们在更新c#写的COM组件版本时用上面的注册方法就可以解决你们的问题了。更改的地方只有COM组件对应的CLSID和对应的COM组件名字。
分享到:
评论

相关推荐

    C#_COM组件注册与调用

    安装了VS(我用的vs2012 64位) gacutil.exe路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools ...3、regasm dll文件名.dll /tlb:dll文件名.tlb 然后回车,显示注册成功

    C#编写COM组件

    需要时自行修改Guid,ProgId;并增加方法入口 注册方法 tlbexp zlTest.dll /out:zlTest.tlb /silent regasm zlTest.dll /tlb:zlTest.tlb /codebase /s

    在c# 2005中编写com组件,供PB11调用实例(附说明和源码)

    前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。 1、c#2005中新建项目,类型为类库,项目名为AddCom确定。  配置:右键点击解决方案资源管理器中的AddCom,选择...

    RegAsm注册工具

    regasm assemblyFile [options] 读取程序集中的元数据,并将所需的项添加到注册表中。注册表允许 COM 客户程序以透明方式创建 .NET Framework 类。类一经注册,任何 COM 客户程序都可以使用它,就好像该类是一个 ...

    Regasm注册工具

    用于C#的dll的注册工具,且可以通过参数来查看注册所写入的注册表信息。

    C#编写ActiveX控件(纯接口,无界面)

    先用RegAsm.exe对控件进行注册,Cmd命令进入下载解压后的目录(cd命令应该会吧~-~),输入RegAsm.exe "RwCardActiveX.dll",注册成功 后用IE(ActiveX只认IE浏览器*_*)打开Test.htm就可以看到你想看到的东西啦~~

    C#微软培训资料

    14.4 继承中关于属性的一些问题.169 14.5 小 结 .172 第四部分 深入了解 C#.174 第十五章 接 口 .174 15.1 组件编程技术 .174 15.2 接 口 定 义 .177 15.3 接口的成员 .178 15.4 接口的实现 .182 ...

    regasm.exe

    regasm.exe 程序集注册工具 程序集注册工具 可单独运行

    Java调用C#com方法

    Java调用C#com方法 C#COM DLL 不能被java直接调用,必须经过C++封装。 调用成功后,在其他机器上如何注册 请下载我的其他上传的gacutil.exe 和 regasm.exe 然后拷贝到其他机器上在dos下执行 gacutil 和regasm 命令...

    COM组件-JS调用测试-源代码

    其中TestCom是C#调用测试COM组件方法; 注册脚本: echo "-------------start RegMyLib----------------------------" net stop mpssvc gacutil /u COMTest.dll regasm /u COMTest.dll /tlb:COMTest.tlb regasm /...

    使用C#开发ActiveX控件

    最近弄了一个在Qt中使用C#控件的功能,使用的方法是通过C#生产ActiveX控件,在Qt中使用该ActiveX控件。本文这里简单的介绍一下如何用C#生成...C#的ActiveX控件需要用regasm程序注册,使用方式如下: 注册 regasm /cod

    Delphi调用C#DLL.rar

    内附 C# DLL的代码 Delphi调用的代码 详细说明 以及注册文件RegAsm.exe

    C#写的ActiveX控件例子-ASPPing

    练手的玩具,可同时支持域名和IP,直接编译后(或regasm注册)可用于本地调用,IIS里使用需要使用gacutil /i myASPPing.dll加入到程序集缓存。要注意的时加入程序集缓存后修改代码后会无法调试,使用gacutil /U ...

    VB6.0加密解密

    COM组件注册 使用cmd进入以下路径调用RegAsm.exe使用以下的命令 \Microsoft.NET\Framework\v4.0.30319 下面的命令将注册 myTest.dll 中包含的所有公共类。 regasm myTest.dll 下面的命令生成包含所有必要的注册表...

    易语言调用C#.Net编译的DLL例子-易语言

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /c /s ClassLibrary.dll CMD下进入ClassLibrary.dll目录执行,其他目录带上ClassLibrary.dll全路径也行 可以在调试状态使用了,也可以编译出来使用。 ...

    第七十三课:基于白名单Regasm.exe执行payload第三季1

    具体参考微软官方文档:基于白名单Regasm.exe配置payload:配置攻击机msf:靶机执行:附录:Micropoor.cs注:x86 payloadpu

    Regasm2.exe – .Net / COM +安装工具。

    本文介绍如何在应用程序中不使用ServicedComponent类的情况下将.Net应用程序设计,生成和安装到COM +目录中。 该解决方案显示了从程序集文件中检索程序集和类属性(包括自定义),并将其存储到COM + Catal中

    非托管MFC调用WPF控件

    非托管MFC调用WPF控件,win7用户请使用regasm.exe在管理员下转换TLB文件。

    第七十三课:基于白名单Regasm.exe执行payload第三季.docx

    第七十三课:基于白名单Regasm.exe执行payload第三季.docx

    jacob-1.18-x86.dll

    jacob-1.18-x86.dll RegAsm注册DLL组件使用jacob调用

Global site tag (gtag.js) - Google Analytics