Desarrollé un servicio de Windows usando C # .NET para generar un informe en PDF. Para generar un archivo PDF, estoy usando un dll de terceros. La aplicación se ejecuta en mi plataforma Windows XP. Cuando implementé el servicio en la versión de 64 bits de Windows Server 2008 , recibí este error:
La recuperación de la fábrica de la clase COM para componentes con CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} falló debido al siguiente error: 80040154.
Registré la DLL usando el comando regsvr32. Puedo ver este CLSID en el registro. Pero el problema persiste.
¿Cual podría ser el problema?
Respuestas:
En VS - propiedades del proyecto - en la pestaña Build - target de plataforma = X86
fuente
Me encontré con un problema muy similar.
Necesitaba usar una vieja DLL de 32 bits dentro de una aplicación web que se estaba desarrollando en una máquina de 64 bits. Registré la DLL de 32 bits en la carpeta windows \ sysWOW64 usando la versión de regsrv32 en esa carpeta.
Las llamadas a la DLL de terceros funcionaron desde pruebas unitarias en Visual Studio pero fallaron desde la aplicación web alojada en IIS en la misma máquina con el error 80040154.
Cambiar el grupo de aplicaciones a "Habilitar aplicaciones de 32 bits" resolvió el problema.
fuente
Parece que su servicio fue construido contra 'Cualquier CPU', causándole errores en 64 bits donde está usando componentes COM. Necesitas construirlo para
x86
.El sitio web probablemente se esté ejecutando como un proceso de 32 bits, por lo que puede usar el componente. Construir su solución contra
x86
forzará su servicio a ejecutarse como 32 bits.fuente
.ocx file (c:\Windows\SysWow>RegSvr32 genX.ocx)
pero obtengo un error. El módulo no se pudo cargar. Asegúrese de que el archivo binario esté almacenado en la ruta especificada o depúrelo para verificar si hay problemas con el archivo binario o archivos .DLL dependientes.No tiene que configurar el objetivo de la plataforma de propiedades del proyecto X86. También puede configurar las opciones de iis para trabajar con x86 como ese
fuente
Si está buscando una manera de hacer que esto funcione sin recompilar su aplicación Any CPU, aquí hay otra solución potencial:
No tomo crédito por la solución, pero funcionó para nosotros. Consulte el enlace de origen para obtener más información y otros comentarios.
Fuente: https://techtalk.gfi.com/32bit-object-64bit-environment/
fuente
El problema es que el proceso del servidor es de 64 bits y la biblioteca es de 32 bits e intenta crear el componente COM en el mismo proceso (servidor en proceso). O recompila el servidor y lo hace de 32 bits o deja el servidor sin cambios y deja el componente COM fuera de proceso. La forma más fácil de hacer que un servidor COM esté fuera de proceso es crear una aplicación COM + - Panel de control -> Herramientas administrativas -> Servicios de componentes.
fuente
An error occurred while processing the last operation. [Error code 00690075] The event log may contain additional troubleshooting information.
No cambié ninguna configuración de compilación.
Simplemente configure "Habilitar aplicación de 32 bits = Verdadero" en la Configuración avanzada de AppPool.
Funciono para mi
fuente
La solución para Windows 2008 Server x64 es:
Este procedimiento es válido, está bien.
fuente
Tuve el mismo problema, pero las otras respuestas solo proporcionaron una parte de la solución.
La solución es doble:
Elimine los 64 bits de Registery.
o
Regístralo como 32 bits:
C:\Windows\SysWOW64\regsvr32 <file.dll>
Registrarlo como 32 bits sin eliminar el registro de 64 bits no resuelve mi problema.
fuente
Tuve un problema relacionado con una solución diferente pero similar:
Tenía un proyecto de servicio de Windows configurado en "Any-CPU" usando una DLL de 64 bits. Mismo mensaje de error. Intenté un montón de cosas, pero nada funcionó. Finalmente, entré en Propiedades del proyecto -> Compilar y noté que el proyecto tenía "Prefiero 32 bits" marcado. Desmarcó esto y no más errores.
Supongo que el servicio de Windows esperaba una DLL de 32 bits y no pudo encontrarla.
fuente
Para cambiar a x86:
fuente
Si está ejecutando un sitio web, también puede intentar configurar su grupo de aplicaciones para deshabilitar las aplicaciones de 32 bits (en la configuración avanzada de un grupo).
fuente
En mi caso personal, el problema se solucionó buscando la identificación de la clase en el Registro de Windows en la máquina del desarrollador (porque el problema se lanzó en una PC cliente). Esta acción se colocará en el componente COM que causa el problema: una biblioteca x86 referenciada en mi proyecto .NET que no se estaba registrando como OCX / COM para el instalador o la aplicación de actualización.
Saludos
fuente
Para cualquiera que usara VSTO, el problema para mí era una referencia faltante al
office
ensamblaje. También aparecería si intentara crear una instancia de ciertos objetos VSTO manualmente.fuente
Descubrí que mi problema estaba relacionado con el registro real de la DLL.
Primero ejecute "Regedit.exe" desde un indicador de CMD (elevé su nivel de seguridad a Administrador, "por si acaso"), luego busque el Registro (haciendo clic en "Editar / Buscar" en el menú RegEdit o presionando Ctrl + F) para el CLSID que se muestra en el mensaje de error que recibió con respecto a la fábrica de la clase COM. Mi CLSID fue 29AB7A12-B531-450E-8F7A-EA94C2F3C05F. Cuando encuentre esta clave, seleccione la subclave "InProcServer2" en ese nodo de Hive y determine el nombre de archivo de la DLL del problema en el cuadro Regedit de la derecha. que se muestra en "Predeterminado". Si ese archivo reside en "C: \ Windows \ SysWow64" (como C: \ Windows \ SysWow64 \ Redemption.dll "), es importante que utilice el archivo" C: \ Windows \ SysWow64 \ RegSvr32.exe "para registre esa DLL desde la línea de comando y NO la predeterminada "C: C: \ Windows \ SysWow64 \ RegSvr32.exe c: \ Windows \ SysWow64 \ Redemption.dll la prensa enter. Cierre la ventana de comandos (a través de "Salir" y luego reinicie el ordenador (utilice siempre reinicio en lugar de cerrar a continuación la puesta en marcha, ya que (curiosamente) Reiniciar realizar un cierre a fondo hacia abajo y recarga de todo mientras que "cerrar" y Power-Up vuelve a cargar una caché almacenada de controladores y otros valores (que pueden ser defectuosos). Siempre que registre una DLL en el futuro, recuerde usar el SysWow64 "RegSvr32.exe" para cualquier DLL almacenada en la carpeta C: \ Windows \ SysWow64 y este problema c (si es causado por un registro incorrecto) no debe volver a ocurrir.
fuente
Mi problema fue que tenía la versión incorrecta de MS Sync FrameWork (1.0) en las referencias de mi proyecto. Después de actualizar a la versión 2.1, el error desapareció y la vida es buena nuevamente.
fuente
En mi caso, estoy produciendo archivo de MS Office como
word
oexcel
, corroWin+R
y ejecutardcomcnfg
, en el Configuración DCOM, además de seleccionar el artículo nombre relacionado OFICINA (como el nombre contieneExcel
oWord
oOffice
) yOpen the properties, select Identity tab and select the interactive user.
como esta respuesta ,CLSID {000209FF-0000-0000-C000-000000000046}
Aparece mi mensaje de error , así que tengo que intentar encontrar este CLSID específico en la configuración de DCOM, y sale, y lo selecciono y sigo el mismo paso para configurarlointeractive user
, luego funciona.fuente