How to check if a DLL file is registered?

后端 未结 7 1797
一生所求
一生所求 2020-12-01 08:07

How do I find whether a DLL file written in C# is registered or not programmatically?

I already tried this code, but it doesn\'t come off.

If I register a DL

相关标签:
7条回答
  • 2020-12-01 08:08
    [DllImport("kernel32")]    
    public extern static bool FreeLibrary(int hLibModule);
    
    [DllImport("kernel32")]    
    public extern static int LoadLibrary(string lpLibFileName);
    
    
    
    public bool IsDllRegistered(string DllName)    
    {
    
          int libId = LoadLibrary(DllName);    
          if (libId>0) FreeLibrary(libId);    
          return (libId>0);    
    }
    
    0 讨论(0)
  • 2020-12-01 08:09

    You can use this:

    My.Computer.Registry.ClassesRoot.GetSubKeyNames.Contains("gEncrypt.clsEncrypt")
    

    Where "gEncrypt.clsEncrypt" is ComName.ClassName.

    0 讨论(0)
  • 2020-12-01 08:10
    1. Declare a pointer to Interface
    2. Call CoCreateInstance on the CLSID and IID
    3. If return value is not S_OK then class is not registered
    0 讨论(0)
  • 2020-12-01 08:20
    class TestDll
    {
        //Import your tested DLL here
        [DllImport("kernel32")]
        public extern static int LoadLibrary(string lpLibFileName);
    }
    
    try
    {
        TestDll test = new TestDll();
    }
    catch(DllNotFoundException ex)
    {
        return false;
    }
    
    0 讨论(0)
  • 2020-12-01 08:25

    If you mean registered in GAC, here is my consideration: to be registered in GAC, an assembly must be signed with a strong name (have a public key token in it's name).

    So you can try load it using Assembly.Load(string), if you got FileNotFoundException - assembly was not registered in GAC.

    If got no error, but result Assembly.GetName().GetPublicKeyToken() is null or empty -- this mean you found assembly in application directory, not in GAC.

    0 讨论(0)
  • 2020-12-01 08:30

    If you know the CLSID of the COM dll, you can just check if there's a key with that CLSID on HKEY_CLASSES_ROOT\CLSID\{CLSID-of-your-COM-component} or HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{CLSID-of-your-COM-component} (Wow6432Node => 32-bit COM registered on a 64-bit machine)

    Here is an example:

    private bool IsAlreadyRegistered()
    {
        using (var classesRootKey = Microsoft.Win32.RegistryKey.OpenBaseKey(
               Microsoft.Win32.RegistryHive.ClassesRoot, Microsoft.Win32.RegistryView.Default))
        {
            const string clsid = "{12345678-9012-3456-7890-123456789012}";
    
            var clsIdKey = classesRootKey.OpenSubKey(@"Wow6432Node\CLSID\" + clsid) ??
                            classesRootKey.OpenSubKey(@"CLSID\" + clsid);
    
            if (clsIdKey != null)
            {
                clsIdKey.Dispose();
                return true;
            }
    
            return false;
        }
    }
    
    0 讨论(0)
提交回复
热议问题