Creé un complemento de Office en VS 2008, C#, .NET 3.5 y VSTO. Se implementa a través de ClickOnce. Un formulario de configuración en tiempo de ejecución ejecuta regsvr32 para registrar "fooapi.dll" incluido con el proyecto que no se puede registrar durante el instal debido a las limitaciones de ClickOnce. ¿Hay alguna forma preferida de verificar y ver si "fooapi.dll" está registrado durante el tiempo de ejecución en C#?¿Cómo puedo comprobar si un dll COM está registrado en C#
Respuesta
Pruebe los métodos Type.GetTypeFromCLSID o Type.GetTypeFromProgID para comprobar rápidamente la existencia de una interfaz COM.
O bien, solo crea una instancia del objeto y atrapa la excepción, p.
catch(COMException ex) {
if(ex.ErrorCode == -2147221164) {
// Retrieving the COM class factory for component with CLSID XXXX failed
}
}
ACTUALIZACIÓN:
This overload parece ser el único que en realidad vuelve null
si el objeto COM no se pueden crear instancias.
La belleza con 'Type.GetTypeFromCLSID' es que siempre devuelve System .__ ComObject independientemente de si el CLSID es válido – rpattabi
Creo que la manera más simple es tratar de crear el componente que se encuentra en fooapi.dll. Envuelva el código de creación en un bloque try/catch y capture la excepción que se genera si el archivo DLL no está registrado correctamente. Esta es la forma más segura de verificar el registro correcto
Si conoce el GUID de las DLL, puede verificar la existencia de la clave de registro en HKCU\SOFTWARE\Classes
.
Compruebe la presencia de HKEY_CLASSES_ROOT\CLSID\{your_CLSID}
y los valores adecuados debajo de ella. Probablemente pueda salirse con la suya buscando valores de InprocServer32
y Codebase
solamente, pero también puede optar por un control más extenso.
También puede simplemente crear una instancia del componente. Sin embargo, si tanto el componente como el cliente son C# y usted usa new
, el CLR podría ser capaz de determinar el ensamblaje apropiado y cargarlo con COM. (Sí, puede ser inteligente así a veces :-)). Debería invocar explícitamente p/invocar a CoCreateInstance
Si tiene el ProgID del componente en el archivo DLL, puede intentar conseguir el Tipo:
System.Type.GetTypeFromProgID(string progID, bool throwOnError)
Si obtiene System.Runtime.InteropServices.COMException
, significa que el ProgID no está registrado.
- 1. ¿Cómo se comprueba que COM dll está registrado o no con C#?
- 2. Determinado mediante programación si está instalada una biblioteca COM (.DLL)
- 3. Tlbexp.exe en un DLL COM
- 4. C# comprobar si un directorio está oculto?
- 5. ¿Cómo puedo comprobar si existe un objeto en C++
- 6. Usando Node.js, ¿cómo puedo verificar si un nombre de dominio está registrado?
- 7. Comprobar si un punto está en un rectángulo girado (C#)
- 8. ¿Cómo comprobar si un hilo está durmiendo?
- 9. ¿Cómo puedo comprobar si una secuencia está vacía en F #?
- 10. registrando com dll en wix
- 11. ¿Cómo puedo comprobar si una variable en Javascript está inicializada?
- 12. ¿Cómo puedo verificar si con ASP.NET 4 está registrado para ejecutar en IIS 7.5?
- 13. C# DataGridView Comprobar si está vacío
- 14. Cómo determinar si DLL es COM o .NET?
- 15. ¿Cómo determinar si el proveedor de VFPOLEDB está instalado/registrado?
- 16. C# compruebe si un puerto COM (en serie) ya está abierto
- 17. Registro Com y dll manifiestos
- 18. ¿Cómo registro una DLL COM escrita en C# con Regsvr32?
- 19. Cómo comprobar si .Net Framework está instalado [C#/WPF]
- 20. C# COM DLL: ¿uso Regasm o Regsvr32?
- 21. Cómo comprobar si un archivo está completamente copiado en .NET
- 22. ¿Cómo comprobar si un carácter está en mayúscula en Python?
- 23. ¿Cómo puedo comprobar si la vista de desplazamiento está rebotando?
- 24. ¿Cómo puedo encontrar en Visual C++ si un archivo OCX (por ejemplo, flash.ocx) está registrado o no?
- 25. Cómo usar COM dll en mi programa C++
- 26. ¿Cómo comprobar si un archivo está comprimido gzip?
- 27. Inicialización de COM y uso en Win32 C++ DLL
- 28. ¿Cómo comprobar si un archivo está vacío en Bash?
- 29. ¿Cómo comprobar si un valor está vacío en Lua?
- 30. Cómo comprobar si un directorio está vacío en Java
Erm, sus esperanzas de que regsvr32 sea capaz de registrar ese servidor COM deberían ser escasas. Requiere privilegios de administrador. Use COM sin registro. –