visual ver una documentos desencriptar descompilar contenido como archivos archivo abrir c# .net

c# - una - ver contenido de archivos dll



¿Cómo comprobar si un archivo DLL está registrado? (7)

¿Cómo puedo saber si un archivo DLL escrito en C # está registrado o no de forma programática?

Ya probé este código, pero no sale.

Si registro un archivo DLL y comprobo usando este código, regresa. Si lo desactivo y ejecuto este mismo fragmento de código, devuelve true nuevamente. Estoy dando el camino completo del archivo DLL como argumento.

Desarrollamos un archivo DLL simple en Visual C ++ . Después de eso lo registramos. Ahora queremos confirmar si está registrado.

Bob, ¿reemplazarás el trozo de código por tu cuenta, todavía es difícil para mí?

Si registro un archivo DLL, ¿hay alguna entrada presente en el registro? ¿Encontraré esas entradas y juzgaré si el archivo DLL está registrado o no?

La última respuesta está trabajando con algunas modificaciones. Busqué en typelib en lugar de clsid.

Earwicker der: De todos modos, lo he hecho con una ligera modificación. Está funcionando ahora.


  1. Declarar un puntero a la interfaz
  2. Llamar a CoCreateInstance en el CLSID y IID
  3. Si el valor de retorno no es S_OK, la clase no se registra

Debe averiguar el GUID de un objeto COM definido en la DLL. Entonces mira esta clave de registro:

HKEY_CLASSES_ROOT/CLSID/{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}/InprocServer32

Reemplace las x con el GUID.

Debe tener un valor predeterminado que contenga la ruta completa a la DLL.


Puedes usar esto:

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

Donde "gEncrypt.clsEncrypt" es ComName.ClassName.


Si conoce el CLSID de la dll COM, puede verificar si hay una clave con ese CLSID en HKEY_CLASSES_ROOT/CLSID/{CLSID-of-your-COM-component} o HKEY_CLASSES_ROOT/Wow6432Node/CLSID/{CLSID-of-your-COM-component} (Wow6432Node => COM de 32 bits registrado en una máquina de 64 bits)

Aquí hay un ejemplo:

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; } }


Si quiere decir registrado en GAC, aquí está mi consideración: para estar registrado en GAC, una asamblea debe estar firmada con un nombre fuerte (tener un token de clave pública en su nombre).

Por lo tanto, puede intentar cargarlo utilizando Assembly.Load(string) , si obtuvo FileNotFoundException : el ensamblado no se registró en GAC.

Si no se obtiene ningún error, pero el resultado Assembly.GetName().GetPublicKeyToken() es nulo o está vacío: esto significa que encontró el ensamblado en el directorio de la aplicación, no en el GAC.


[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); }


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; }