详解C#自动注册DLL(OCX)控件的方法.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详解C#自动注册DLL(OCX)控件的方法

详解两种C#自动实现DLL(OCX)控件注册的方法 本文将为大家讲述DLL库自动注册的两种方法,包括调用Regsvr32方法等。希望通过本文能对大家有所帮助。 尽管MS为我们提供了丰富的.NET Framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写。当需要用到Dll引用的时候,我们通常会通过“添加引用”的方式将它们纳入到项目中,然后就可以像使用自己的类一样方便的使用它们了。但是,有些Dll库(OCX)文件是需要注册到Windows注册表后才能正常添加和使用的。本文介绍两种为Dll库(OCX)自动注册的方法,为大家提供参考。 首先,大家都知道在Windows的“运行”中,输入“Regsvr32.exe 路径”这样的方法来手动注册Dll控件(OCX),显示这种方法对于程序的自动化部署等带来极大的不便,因此,今天我们着重介绍如何用C#实现自动注册。 方法一:调用Regsvr32法 既然可以在运行栏中输入“Regsvr32.exe 路径”的方法来注册,那么,一定可以在C#程序中采用同样的方法来调用Regsvr32,以实现注册: Process?p?=?new?Process(); ? p.StartInfo.FileName?=?Regsvr32.exe; ? p.StartInfo.Arguments?=?/s?C:\\DllTest.dll;//路径中不能有空格 ? p.Start();? 采用这种方法,注意要添加对命名空间System.Diagnostics的引用: using?System.Diagnostics;? 另外,这种方法有一个不足之处,那就是注册工作是在本程序之外由Regsvr32.exe程序来完成的,系统内不方便知道注册的结果,也不方便对注册过程弹出的对话框进行自定义和控制。这里附Regsvr32的参数说明:(感谢网友伍华聪的提醒) regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是: regsvr32 [/u] [/s] [/n] [/i[:cmdline]] DLL文件名 命令可以在“开始→运行”的文本框中,也可以事先在bat批处理文档中编写好命令。未带任何参数是注册DLL文件功能,其它参数对应功能如下: /u:反注册DLL文件; /s:安静模式(Silent)执行命令,即在成功注册/反注册DLL文件前提下不显示结果提示框。 /c:控制端口; /i:在使用/u反注册时调用DllInstall; /n:不调用DllRegisterServer,必须与/i连用。 方法二:调用DllRegisterServer函数法 既然方法一不大实用,那么我们就来寻找一种真正实用的方法来达到我们的目的吧。研究Regsvr32.exe和Dll文件,我们会发现,其实每个需要注册的文件都包括一个DllRegisterServer()方法,Regsvr32.exe就是通过调用该方法来完成Dll的注册的。呵呵,知道了这个,我们就可以自己调用DllRegisterServer()来完成注册过程啦。 首先,还得引入外部方法: [DllImport(DllTest.dll)] ? public?static?extern?int?DllRegisterServer();//注册时用 ? [DllImport(DllTest.dll)] ? public?static?extern?int?DllUnregisterServer();//取消注册时用? 接下来就不难啦: int?i?=?DllRegisterServer(); ? if?(i?=?0) ? { ? ????//注册成功! ? } ? else? { ? ????//注册失败}? 取消注册的过程就不应再贴代码啦。 两种方法介绍完啦,可是好像还缺点什么?对了,那就是对Dll是否已经注册过了的判断。一般情况下,我们可以将对Dll控件的注册过程放在系统启动的过程中来完成,但是,总不能每次启动都注册一次吧?这样做显然不合理。那么,我们就来判断一下,当前Dll是否已经注册过,如果已注册过,就跳过注册过程。 每一个Dll的注册都会在注册表里记录下有关它本身的资料,如注册路径,唯一ID等。我们这里就是利用它留下的唯一ID号来判断: RegistryKey?rkTest?=?Registry.ClassesRoot.OpenSubKey (CLSID\\{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}\\); ? if?(rkTest?==?null){????//Dll没有注册,在这里调用DllRegisterServer()吧}? 注意要添加

文档评论(0)

jgx3536 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档