问题是这样的,我现在遇到一个这样的需求,希望能够用C#去对系统中的dll进行管理。包括实现对dll的注册,删除已注册的dll,返回系统中已经注册dll的列表等功能。我在网上找到了如何注册跟取消注册的代码,例如http://www.cnblogs.com/luckeryin/archive/2010/03/17/1687999.html,但是我想请教下高手,.net平台有没有提供一些方法或者一些类能够实现上述对dll管理的功能呢?或者有没有类似的资料呢?就像windows服务的话在ServiceProcess下有个GetServices()的方法就可以返回全部的服务信息,那对于dll的话有没有一个类似的方法可以返回所有已注册的dll的方法呢?有没有这样的API呢??希望大家能帮忙解决下~谢谢~
PS:如果需要调用API,请问调用的什么API??谢谢~

解决方案 »

  1.   

    注册你已经实现了
    删除:System.Diagnostics.Process.Start("regsvr32", "/u "+pathdll);//注销DLL 
      

  2.   

    所有dll在注册表中的位置:
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls]可以用RegistryKey类操作注册表1.读取指定名称的注册表的值 
    private string GetRegistData(string name) 

       string registData; 
       RegistryKey hkml = Registry.LocalMachine; 
       RegistryKey software = hkml.OpenSubKey("SOFTWARE",true); 
       RegistryKey aimdir = software.OpenSubKey("XXX",true); 
       registData = aimdir.GetValue(name).ToString(); 
       return registData; 

    以上是读取的注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下的XXX目录中名称为name的注册表值; 2.向注册表中写数据 
    private void WTRegedit(string name,string tovalue) 

       RegistryKey hklm = Registry.LocalMachine; 
       RegistryKey software = hklm.OpenSubKey("SOFTWARE",true); 
       RegistryKey aimdir = software.CreateSubKey("XXX"); 
       aimdir.SetValue(name,tovalue); 

    以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下新建XXX目录并在此目录下创建名称为name值为tovalue的注册表项; 3.删除注册表中指定的注册表项 
    private void DeleteRegist(string name) 

       string[] aimnames; 
       RegistryKey hkml = Registry.LocalMachine; 
       RegistryKey software = hkml.OpenSubKey("SOFTWARE",true); 
       RegistryKey aimdir = software.OpenSubKey("XXX",true); 
       aimnames = aimdir.GetSubKeyNames(); 
       foreach(string aimKey in aimnames) 
       { 
        if(aimKey == name) 
         aimdir.DeleteSubKeyTree(name); 
       } 

    以上是在注册表中HKEY_LOCAL_MACHINE\SOFTWARE目录下XXX目录中删除名称为name注册表项; 4.判断指定注册表项是否存在 
    private bool IsRegeditExit(string name) 

       bool _exit = false; 
       string[] subkeyNames; 
       RegistryKey hkml = Registry.LocalMachine; 
       RegistryKey software = hkml.OpenSubKey("SOFTWARE",true); 
       RegistryKey aimdir = software.OpenSubKey("XXX",true); 
       subkeyNames = aimdir.GetSubKeyNames(); 
       foreach(string keyName in subkeyNames) 
       { 
        if(keyName == name) 
        { 
           _exit = true; 
           return _exit; 
        } 
       } 
       return _exit; 

      

  3.   

    注册表操作类很多,参考:
    http://www.cnblogs.com/hanfeng/archive/2005/03/03/112246.html