ocx注册以及检测(转)
转自:http://home.51.com/heiyijiushi/diary/item/10053693.html
C#自动实现Dll(OCX)控件注册的两种方法2012-07-31 21:20
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 [/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啦。
ocx注册以及检测(转)相关推荐
- windows系统下注册和检测 ocx,dll控件的问题.........
in fact ...ocx控件注册和检测其实是对注册表中的相应的项注册和检测,当然注册表那些操作函数就不能不用到: 注册ocx控件无非两句话的功夫, 1.在系统目录下即:C:/windows/sys ...
- ajax用户名注册自动刷新,ajax+jsp实现 无刷新页面下注册时检测用户名是否已存在...
当前位置:编程学习 > JAVA >> ajax+jsp实现 无刷新页面下注册时检测用户名是否已存在 如题:ajax+jsp实现 无刷新页面下注册时检测用户名是否已存在 求大神们赐教 ...
- C#通过操作注册表检测office版本
在编写毕业论文辅助编辑软件时,需要检测用户是否安装office以及office的版本,后来在网上找到通过注册表检测的方法,不过由于Windows32位软件和64位软件操作的注册表是不同的,关于这个问题 ...
- 【VC6.0TeeChart5.ocx注册方法】
VC6.0 TeeChart5.ocx注册方法: (1)下载好TeeChart5.ocx: (2)32位系统将其放在C:\WINDOWS\System32目录下,64位系统将其放在C:\WINDOWS ...
- 通过注册表检测是否安装了VC++ 2008 SP1 redistributable。
在发布 vs2008 程序时,往往会发现程序在某些电脑上无法运行.原因是目标电脑上没有相关的VC运行库. 最简单的方法,就是到微软的官网上下载并安装最新的 Visual C++ 2008 SP1 re ...
- WIN7 64位 OCX注册
参考: http://blog.csdn.net/leidengyan/article/details/7577559 出现: 可能与您正在运行的windows版本不兼容.检查该模块是否与 re ...
- u9过期老玉米挖掘软件V2版-过期域名采集软件-网址采集软件-域名采集软件-未注册域名检测软件-老域名采集工具
更多介绍可以观看官网:https://www.u9seo.com/product/295.html 视频演示: http://file.iui8.com/v2.mp4?_=1 功能介绍: 购买联系客服 ...
- ajax 用户已注册,Ajax检测用户名是否已经注册
程序功能 当用户名输入完成(即用户名输入框失去焦点),利用Ajax检测用户名是否已经注册! 实现过程 利用Ajax向CheckUserServlet发送请求,判断该用户名是否可用.这里只是为了演示Aj ...
- winform 通过驱动注册ID检测是否已安装驱动
1 public bool IsRegistered() 2 { 3 string clsid = ConfigurationManager.AppSettings["clsid" ...
- Msflxgrd.ocx注册失败解决方法
第一步.将Msflxgrd.ocx拷贝至C:\Windows\SysWOW64目录下: 第二步.在C:\Windows\System32中找到cmd.exe,右键点击"以管理员身份运行&qu ...
最新文章
- 神经网络迭代次数与Lambert定律
- python 多线程中的 join 和 daemon
- 远洋整站下载器不能用https_最后下载个喜马拉雅
- 好看的a标签按钮样式
- BMVC2018图像检索论文—使用区域注意力网络改进R-MAC方法
- 推荐几个win8系统下载比较好的网站
- Visual Studio 2005 开发 Silverlight 1.0
- Mac电脑:Flutter开发环境配置小白教程
- AtCoder题解集锦
- 使用iconv进行GBK到BIG5编码转/简繁转换遇到的问题
- 思岚A1M8激光雷达-ubuntu18.04-slam建图参考
- mysql 实现api接口_一套免费MySQL数据库数据接口API,让项目开发更简单
- 淘宝最新开店卖家店铺采集工具能采集同行信誉等级高的店铺吗
- [数学 悖论/理论]-(1) 直角三角形两边之和等于第三边!
- 【读书笔记】《全域营销:付费增长与流量变现实战讲义》——我的公域私域运营教科书
- xadmin安装与使用
- 小米实习面试总结(1)
- 招商银行、伊利股份套利模型(1)
- 2019创业新项目手游充值代理是骗人的还是风口?
- 鸡兔同笼:笼子里一共有鸡和兔子35只,一共有94条退, 笼子里一共有鸡和兔子共多少只