registrada regdb_e_classnotreg personalizadas interopservices excepción excepciones error clase 0x80040154 c# vb.net

c# - personalizadas - exception de hresult 0x80040154 regdb_e_classnotreg



Cómo resolver la clase de excepción COM no registrada(Excepción de HRESULT: 0x80040154(REGDB_E_CLASSNOTREG))? (18)

Al registrar la clase (específicamente su CLSID), ver, por ejemplo, here .

Cuando intento crear una instancia de una clase COM arroja una excepción como

Clase no registrada (Excepción de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Por favor sugiera como podria resolverlo?


Aquí encuentre la solución, ejecute la herramienta mmc -32 (no dcomcfg)

En el sistema de 64 bits con Office de 32 bits, pruebe esto:

Start Run mmc -32 File Add Remove Snap-in Component Services Add OK Console Root Component Services Computers My Computer DCOM Config Microsoft Excel Application


Debe asegurarse de que todos sus ensamblajes compilan para la arquitectura correcta. Intente cambiar la arquitectura de x86 si la reinstalación del componente COM no funciona.


En mi caso, la clase se registró correctamente y se construyó en CUALQUIER modo CPU / 64 bit .

Pero la propiedad Habilitar aplicaciones de 32 bits del grupo de aplicaciones IIS de la aplicación que usa la clase se estableció en True .

No se encontró la clase debido a la falta de correspondencia de la arquitectura entre la configuración del conjunto de aplicaciones y la clase registrada real.

La configuración Habilitar aplicaciones de 32 bits en False solucionó el problema.


Estaba compilando mi aplicación dirigida a cualquier CPU y el problema principal resultó que Adobe Reader estaba instalado. V10.x necesita actualizar v11.x , esta es la forma en que puedo resolver este problema.


La forma en que resolví este problema fue registrar el COM través de regsvr32 .

asegúrese de que el COM que está invocando esté registrado.

Mi aplicación usaba xceedcry.dll y no la estaba registrando. Una vez que lo registré, la aplicación funcionó bien.


Lo hice funcionar habilitando aplicaciones de 32 bits en la configuración avanzada del conjunto de aplicaciones. Haga clic con el botón derecho en el grupo de aplicaciones y elija configuraciones avanzadas: habilite las aplicaciones de 32 bits. Esto puede ayudar a alguien por ahí.


Me encontré con el mismo problema usando una clase COM, es decir, ''Clase no registrada excepción'' en tiempo de ejecución. Para mí, pude resolver yendo al archivo app.config y cambiar los elementos ''startup'' y ''supportedRuntime'' a algo como:

<configuration> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/> </startup> </configuration>

Puede leer más sobre los detalles aquí http://.com/questions/1604663/

y aquí http://.com/questions/1604663/

Debo señalar que estoy ejecutando Visual Studio 2017. Target cpu = x86 Incrustar Interop Type = true (en la ventana de propiedades)


Me encontré con este problema llamando a un ensamblado .Net desde un cliente C ++ a través de COM. Resulta que uno de los ensamblajes del que dependía el ensamblado .Net no se pudo encontrar. Luché por un tiempo tratando de descubrir qué pasaba con la primera asamblea, pero en realidad era una de las dependencias de la 1.ª asamblea. Recibí dos errores diferentes al llamar a CoCreateInstance () desde el cliente C ++. El primero fue: REGDB_E_CLASSNOTREG Clase no registrada Y el segundo intento fue: 0x80131040: la definición del manifiesto del conjunto ubicado no coincide con la referencia del ensamblado.

Por lo tanto, verifique que las referencias de su ensamblaje estén presentes. Descubrí esto explorando la 1ra asamblea con dotPeek y notando que faltaba una de sus referencias. Al colocar la versión correcta de la dependencia en la carpeta, se resolvieron ambos errores.


Mi problema y la solución

Tengo un dll de terceros de 32 bits que he instalado en la máquina 2008 R2, que es de 64 bits.

Tengo un servicio wcf creado en .NET Framework 4.5 que llama al dll de terceros de 32 bits para el proceso. Ahora tengo la propiedad de compilación configurada para apuntar a ''cualquier'' CPU y desplegada en la máquina de 64 bits.

cuando intenté invocar el servicio wcf recibí el error "80040154 Clase no registrada (Excepción de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)

Ahora utilicé ProcMon.exe para rastrear el problema de registro de com e identifiqué que el proceso está buscando la entrada de registro en HKLM / CLSID y HKCR / CLSID donde no hay ninguna entrada.

Llegó a saber que Microsoft no registrará los componentes com de 32 bits en las rutas HKLM / CLSID, HKCR / CLSID en la máquina de 64 bits, sino que ubica la entrada en las rutas HKLM / Wow6432Node / CLSID y HKCR / Wow6432Node / CLSID.

Ahora el conflicto es un proceso de 64 bits que intenta invocar un proceso de 32 bits en una máquina de 64 bits que buscará la entrada del registro en HKLM / CLSID, HKCR / CLSID. La solución es forzar el proceso de 64 bits para mirar la entrada del registro en HKLM / Wow6432Node / CLSID y HKCR / Wow6432Node / CLSID.

Esto se puede lograr configurando las propiedades del proyecto de servicio wcf para dirigirse a la máquina ''X86'' en lugar de ''Cualquiera''.

Después de implementar la versión ''X86'' en el servidor 2008 R2, apareció el problema "System.BadImageFormatException: Could not load file or assembly"

La solución a esta badimageformatexception es establecer ''Enable32bitApplications'' en ''True'' en las propiedades de IIS Apppool para el grupo de aplicaciones correcto.


Mi solución fue cambiar " Activar aplicaciones de 32 bits " a True en la configuración avanzada del grupo de aplicaciones relativo en IIS.


Para mí, tuve que crear una configuración de compilación de 64 bits.


Parece que cualquier programa o proceso que intente inicializar no está instalado en su máquina, tiene una instalación dañada o necesita ser registrado.

Puede instalarlo, repararlo (mediante Agregar o quitar programas) o registrarlo (a través de Regsvr32.exe).

No ha brindado suficiente información para ayudarlo más que esto.


Si está utilizando componentes COM de 64 bits en una aplicación web en IIS, asegúrese de que el grupo de aplicaciones esté configurado para no permitir aplicaciones de 32 bits ( habilite las aplicaciones de 32 bits: falso en configuraciones avanzadas)


También tenga en cuenta que el contexto de clase al inicializar puede crear esa excepción. Si tiene un objeto que está codificado como INPROC_SERVER pero intenta CoCreateInstance como CLSCTX_LOCAL_SERVER, también obtendrá ese error.

Debe asegurarse de que el objeto esté registrado y que CoCreateInstance esté creando una instancia con el contexto de clase correcto.


Tuve el mismo problema al usar MapWinGis. Encontré la solución, trabajando en el proyecto visual forms 2015 de Windows, simplemente haga clic derecho en el proyecto-> propiedades-> Build, establezca la configuración en Todas las configuraciones y en el "objetivo de plataforma" de conbobox configúrelo en x64.


en mi caso

my platform es x64

the Dll library(sdk) y el redistributable package es x64

asi que

  1. en el explorador de soluciones navigate to your project

  2. abrir Properties

  3. change the Platform target from AnyCPU to x64


vaya al directorio de .Net framework y registre su respectivo dll con la ruta dll de espacio en blanco de Regsvr32.exe .