dll的注册与反注册

regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:
regsvr32 [/i[:cmdline]] DLL文件名
命令可以在“开始→运行”的文本框中,也可以事先在bat批处理文档中编写好命令。未带任何参数是注册DLL文件功能,其它参数对应功能如下:
/u:反注册DLL文件;
/s:安静模式(Silent)执行命令,即在成功注册/反注册DLL文件前提下不显示结果提示框。
/c:控制端口;
/i:在使用/u反注册时调用DllInstall;
/n:不调用DllRegisterServer,必须与/i连用。

在C#中,可以使用Process来调用regsvr32.exe实现dll的自动注册

/// <summary>
/// 注册
/// </summary>
/// <param name="dllFile"></param>
public void Regist(string dllFile)
{
    if (dllFile.Contains(‘ ‘) == true)
    {
        throw new Exception("路径中有空格,无法注册!");
    }

    Process p = new Process();
    p.StartInfo.FileName = "Regsvr32.exe";
    p.StartInfo.Arguments = String.Format("/s {0}", dllFile);//路径中不能有空格
    p.Start();
}

/// <summary>
/// 反注册
/// </summary>
/// <param name="dllFile"></param>
public void UnRegist(string dllFile)
{
    if (dllFile.Contains(‘ ‘) == true)
    {
        throw new Exception("路径中有空格,无法注册!");
    }

    Process p = new Process();
    p.StartInfo.FileName = "Regsvr32.exe";
    p.StartInfo.Arguments = String.Format("/u /s {0}", dllFile);//路径中不能有空格
    p.Start();
}

但是,上面的方法无法获取到注册的结果。

第二种注册方法,这种方法可以获取到注册的结果:

[DllImport("DllTest.dll")]
public static extern int DllRegisterServer();//注册时用
[DllImport("DllTest.dll")]
public static extern int DllUnregisterServer();//取消注册时用
int i = DllRegisterServer();
if (i >= 0)
{
    //注册成功!
}
else
{
    //注册失败
}

如何判断是否已经注册,以避免重复注册:

RegistryKey rkTest = Registry.ClassesRoot.OpenSubKey("CLSID\\{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}\\");
if (rkTest == null)
{
    //Dll没有注册,在这里调用DllRegisterServer()吧
}

上面的{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}是dll的唯一ID,可以通过先注册该dll,到注册表的“HKEY_CLASSES_ROOT\CLSID”分支下“查找”Dll的名称或路径,就可以看到这个ID。

转载自:http://home.51.com/heiyijiushi/diary/item/10053693.html

dll的注册与反注册,布布扣,bubuko.com

时间: 2024-10-10 07:26:19

dll的注册与反注册的相关文章

ActiveX控件的注册和反注册

原文转自 https://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41649495 ActiveX控件,需要注册之后才能使用. 注意:注册与反注册都需要管理员权限,才能操作成功. 注册命令:regsvr32 "E:\Clock.ocx" 反注册命令:regsvr32 /u "E:\Clock.ocx" 在此介绍两个实用工具: 工具一:RegDllView 功能:查看电脑中已注册的组件(dll,exe,oc

30.普通API集成到go-micro体系中(2):代码注册与反注册

首先理一下思路,使用代码去注册其他api到go-micro体系中,我们就需要在代码中模拟出这样的json数据,并发送给我们的micro Registry服务 { "jsonrpc": "2.0", "method": "Registry.Deregister", "params": [{ "name": "api.jtthink.com.test", "ve

springcloud 服务注册、反注册 AOP 拦截,实现自定义功能

@Aspect@Component@Order(1000)public class EurekaServerAspect { private Logger logger = Logger.getLogger(getClass()); @Autowired IRegisterSevice registerSevice; @Pointcut("execution(public * org.springframework.cloud.netflix.eureka.server.EurekaServer

服务关闭时注册和反注册

实现部分 package util import ( "context" "fmt" "go.etcd.io/etcd/clientv3" "time" ) type Service struct { client *clientv3.Client } func NewService() *Service { config := clientv3.Config{ Endpoints: []string{"106.12

C#实现Dll(OCX)控件自动注册的两种方法 网上找的 然后 自己试了试 还是可以用的

尽管MS为我们提供了丰富的.net framework库,我们的程序C#开发带来了极大的便利,但是有时候,一些特定功能的控件库还是需要由第三方提供或是自己编写.当需要用到Dll引用的时候,我们通常会通过“添加引用”的方式将它们纳入到项目中,然后就可以像使用自己的类一样方便的使用它们了.但是,有些Dll库(OCX)文件是需要注册到Windows注册表后才能正常添加和使用的.本文介绍两种为Dll库(OCX)自动注册的方法,为大家提供参考. 首先,大家都知道在Windows的“运行”中,输入“Regs

Windows 注册和取消注册一个dll或者ocx

原文:Windows 注册和取消注册一个dll或者ocx 一.DLL是什么        DLL,是Dynamic Link Library 的缩写形式,中文名称为动态链接库.        DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内

Dos命令注册,取消注册DLL文件

在某些场景下,比如在对接银行支付的开发中,会需要手动注册dll文件,本篇博客就总结下在Dos命令下注册,取消注册dll的操作方法 1.注册dll (1)用管理员身份打开cmd窗口,切换到dll所在目录 (2)执行Regsvr32 SAFESIGN.dll命令(SAFESIGN.dll为要注册的dll名称) 2.取消注册dll (1)用管理员身份打开cmd窗口,切换到dll所在目录 (2)执行Regsvr32 /u SAFESIGN.dll命令(SAFESIGN.dll为要取消注册的dll名称)

反注册(LiveData的反注册生命周期)

LifecycleBoundObserver 中提供了一个 detachObserver() 方法,只有这个方法里面,会进行生命周期的反注册功能. @MainThread public void removeObserver(@NonNull final Observer<? super T> observer) { //判断如果不是主线程则抛异常 assertMainThread("removeObserver"); //mObservers 是属于这个 LiveData

[原创]VB注册机独辟蹊径-----注册机也可以这样写

近段时间接了个项目,是关于一个称重传感器的上位机系统,需要一机一码针对不同的客户机分别注册,第一次注册完后,下次打开后不必注册. 刚开始想用正规的注册机办法去完成,搜罗了半天,发现现在大部分的硬盘注册机 其实并不是读取硬盘的物理序列号来进行加密的,而是采用读取磁盘分区卷标号来作为加密的基值.先按照读取磁盘卷标号开发了注册机程序,在自己的三台电脑上测试都没问题,也就是说没出现过读取卷标号重复的情况.结果第二天发给客户测试,客户反应用了几台电脑的注册码全部一样,瞬间石化. 后来自己分析过,可能是由于