¿Cómo reparar el error COMException 80040154?

Trasladar un proyecto de C # en funcionamiento de una máquina de Windows 7 de 64 bits a una máquina de XP de 32 bits provocó el siguiente error:

La recuperación de la fábrica de la clase COM para el componente con CLSID {681EF637-F129-4AE9-94BB-618937E3F6B6} falló debido al siguiente error: 80040154.

681EF637-F129-4AE9-94BB-618937E3F6B6 no está en el registro, por lo que no está instalado correctamente, pero esta es la misma ID que anteriormente era un problema en la máquina de 64 bits de Windows 7. La solución a este error en la máquina de 64 bits de Windows 7 se encontró aquí (cambie el objective de la plataforma a x86) pero esto no resuelve el problema en la máquina XP de 32 bits. ¿Cómo puedo encontrar el dll asociado con 681EF637-F129-4AE9-94BB-618937E3F6B6 o, mejor aún, cómo puedo reparar esta excepción?

Para encontrar el archivo DLL, ve a tu máquina de 64 bits y abre el registro. Busque la clave llamada HKEY_CLASSES_ROOT\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32 . Esta clave tendrá el nombre de archivo de la DLL como su valor predeterminado.

Si resolvió el problema en su máquina de 64 bits recomstackndo su proyecto para x86, entonces deberá buscar en la porción de 32 bits del registro en lugar de hacerlo en el lugar normal. Esto es HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{681EF637-F129-4AE9-94BB-618937E3F6B6}\InprocServer32 .

Si la DLL está construida para 32 bits, entonces puede usarla directamente en su máquina de 32 bits. Si está construido para 64 bits, deberá ponerse en contacto con el proveedor y obtener una versión de 32 bits de ellos.

Cuando tenga el archivo DLL, regístrese ejecutando c: \ windows \ system32 \ regsvr32.exe.

Tuve el mismo problema en un servicio de Windows. Todas las claves están en el lugar correcto en el registro. La comstackción del servicio se realizó para x86 y todavía tengo la excepción. Descubrí acerca de CorFlags.exe

Ejecute esto en su service.exe sin indicadores para verificar si ejecuta menos de 32 bits. Si no se ejecuta con la bandera /32BIT+ /Force (Forzar solo para ensambles con signo)

Si tiene el UAC activado, puede obtener el siguiente error: corflags : error CF001 : Could not open file for writing al usuario control total sobre los ensamblajes.

Salida de consola

SOLICITUD:

La solución posible es modificar la plataforma de su proyecto de ‘Cualquier CPU’ a ‘X86’ (en Propiedades del proyecto, Construir / Objetivo de la plataforma)

CAUSA PRINCIPAL

VSS Interop es un ensamblado administrado que utiliza Framework de 32 bits y el dll contiene un objeto COM de 32 bits. Si ejecuta este dll COM en el entorno de 64 bits, obtendrá el mensaje de error.

Mover las variables de Excel que son globales declarar en su formulario a local como en mi forma que tengo:

 Dim xls As New MyExcel.Interop.Application Dim xlb As MyExcel.Interop.Workbook 

Las dos líneas anteriores se declararon globales en mi forma, así que moví estas dos líneas a la función local y ahora la herramienta funciona bien.