`
v5qqcom
  • 浏览: 1276683 次
文章分类
社区版块
存档分类
最新评论

C#自动实现Dll(OCX)控件注册的两种方法

 
阅读更多

尽管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()吧

注意要添加对命名空间Microsoft.Win32的引用:

using Microsoft.Win32;

其中的“{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}”就是该Dll的唯一ID啦,每一个Dll文件都会不一样的。但是,问题又来了,怎么样知道它的唯一ID呢?其实很简单,那就是“逆向思维”。我们可先注册这个Dll文件,然后到注册表的“HKEY_CLASSES_ROOT/CLSID”分支下“查找”Dll的名称或路径,就可以看到这个ID啦。简单我就不多说啦。

分享到:
评论

相关推荐

    C#自动实现DLL(OCX)控件注册

    自动实现自动实现DLL(OCX)控件注册,通过几种方法实现控件的系统注册。

    海康威视摄像头OCX控件

    海康威视摄像头OCX控件,可以显示摄像头图像、抓取图像、保存图像等,在C#、VB、组态王中都可以使用。 带:OCX控件接口说明(V2.3).doc

    将第三方库封装为OCX控件(多屏显示控件)

    通过调用第三方库(lib、dll、.h)文件,封装为ocx控件,该工程主要实现了视频监控中得多屏显示

    c# 皮肤控件 OCX

    c# 皮肤控件 OCX控件 IrisSkin2.dll

    c#调用控件示例及取值的方法

    C# 中调用 dll ocx 的示例 调用及取值的方法

    c#在窗体显示office的控件AxInterop.DSOFramer

    包括dsoframer.ocx和四个.dll文件。运行dsoframer.ocx.exe,安装到 c:\windows\system32下面,相当于把dsoframer.ocx文件拷贝到该文件下下面。然后将四个.dll文件拷贝到相同的路径下面。之后进行注册。步骤开始菜单...

    c#调用vc写的ocx控件示例

    在c#中怎样调用VC写的OCX控件,主要有两个关键环节 两个关键环节:导入ocx控件,创建实例。1 注册ocx: 代码如下:regsvr32.exe alasunsmscon.ocx 2 在CMD窗口中执行: 代码如下:AxImp.exe alasunsmscon.ocx生成两个...

    将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装

    将ocx和DLL文件打包成cab文件,实现IE浏览器在线安装 我们打开淘宝等网站时,IE浏览器会提示安装空间,这个控件便是用于对用户名密码进行加密的ActiveX控件。如何在我们的站点上安装如此控件,让用户可以通过简单的...

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

    C#编写ActiveX控件,使用VS2008开发,亲测可用,里面两个方法int Test(int x, int y),string ShowMsg(),并提供IE调用的页面例子。 先用RegAsm.exe对控件进行注册,Cmd命令进入下载解压后的目录(cd命令应该会吧~-~...

    C# 播放gif控件

    可以播放gif动画的dll控件,让窗体更丰富!

    MSCHRT20.OCX

    VC6.0/MFC/C#中经常需要使用MS CHART控件来做图表,但他们本身不自带这个控件,所以需要我们自己下载OCX文件并进行注册。 注册方法: 1.XP系统下:将解压出来的MSCHRT20.OCX,msdatasrc.dll拷贝到C:\WINDOWS\SYSTEM...

    免注册调用COM组件方法二-Assembly Manifests

    众所周知,通过Assembly Manifests,我们可以免注册调用各种进程内的COM组件,包括DLL组件和OCX控件等。这里提供一个用于快速创建Assembly Manifest文件的工具。这个工具本身就是通过Assembly Manifests来免注册调用...

    dsoframerOCX控件 附件CSharp例程

    包括dsoframerOCX控件 控件注册脚本 C#例程

    打印条形码控件,安装后可集成到VB C#等源码中

    打印条形码控件,安装后可集成到VB C#等源码中 打印条形码动态库

    打印控件ocx

    重新发布简单:最多只需分发两个 DLL 文件。 易学易用:完全可视化设计,完善的复制/剪切/粘贴(Copy/Cut/Paste)和恢复与重做(Undo/Redo)功能。 编写了完整详尽的帮助文档。提供了丰富例程,包括VB.NET...

    mschart所需的dll文件

    开发的软件用到了mschart控件。在部署时由于在每台客户端安装mschart太过繁琐。只要把这6个dll文件复制到程序目录下打包发布即可。ps:在网络上找了很多方法;如注册mxcrt20.ocx都木有成功。

    VB矢量绘图控件Vecad6.1

    包括32位DLL和OCX组件。可在各种流行的开发工具中使用.VeCAD工具包中也包括一个强大的C基于VeCAD引擎的CAD编辑器。 VB矢量绘图控件Vecad6.1,带注册码,这个是真正的6.1版本的,网上其它网站提供的所谓6.1其实是6.0版本...

    二维CAD二次开发控件(免费版)

    控件注册: 控件注册,命令为: regsvr32 Asocx.ocx 解除注册: regsvr32 Asocx.ocx /u3.功能说明:选择:单击鼠标左键选择元素; 框选:在选择状态下,按住鼠标托动进入框选状态; 选择移动元素:在选择状态下,...

    Flash 控件Demo

    4.Flash.ocx 要附带在应用程序的根目录下,防止系统没有装Flash插件,自动注册 5.正常引用是不会报异常的,如果有异常,通常把 Interop.ShockwaveFlashObjects.dll, AxInterop.ShockwaveFlashObjects.dll, 放到...

Global site tag (gtag.js) - Google Analytics