码迷,mamicode.com
首页 > 其他好文 > 详细

dll的注册与反注册

时间:2014-06-28 23:45:23      阅读:311      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   get   使用   

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

dll的注册与反注册

标签:style   blog   http   color   get   使用   

原文地址:http://www.cnblogs.com/hibernation/p/3794140.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!