2012-09-17 32 views
8

Estoy intentando registrar una DLL usando WiX. Ahora sé y entiendo que debería usar heat y obtener la información del registro para mí, pero el calor parece fallar con el siguiente mensaje de error: heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193No se puede registrar DLL usando WiX

He mirado alrededor y encontré esta publicación que explica un poco más detalladamente sobre registering DLLs pero me gustaría evitar la ruta de auto registro si es posible. También veo mencionar el registro manual de las DLL más abajo, pero no estoy muy familiarizado con el registro ni con los objetos COM, así como con saber dónde podría obtener el CLSID, ProgId y cualquier otra información que se haya mencionado.

Si alguien puede señalarme en la dirección correcta o explicarme lo que tengo que hacer para ejecutar la DLL a través de heat sería muy apreciado.

Respuesta

1

¿Es esto una DLL no administrada/nativa? ¿Dependency Walker muestra alguna dependencia faltante? Por lo general, esto significa que la función DllRegister falló y Heat no pudo extraer ningún dato. Arregle ese problema y debería obtener una buena meta XML.

+0

Es una DLL creada con ATL 6.0. Si llamo a regserv32, todo se carga bien y el sistema lo reconoce, pero hasta ahora siempre se ha cargado como un SelfReg. – Seb

+0

Este tipo de problema es realmente difícil de resolver. Si puede compartir el archivo DLL, puedo intentar extraerlo por usted. También puede usar una herramienta de instantánea de registro en una máquina limpia para capturar el regsvr32 y luego crearlo manualmente en wxs. O utilice la evaluación de InstallShield para extraer el COM y WiX oscuros para descompilar nuevamente en wxs. Muchos trucos pero requieren experiencia. –

+0

Realmente no puedo compartir el archivo DLL debido a que es propiedad de la empresa, pero he intentado usar RegSpy y se ha congelado durante aproximadamente 8 horas. Esperando que solo intente sacar los datos. – Seb

0

Estaba teniendo el mismo problema con Wix heat.exe: advertencia HEAT5150: No se pudieron recopilar datos de un archivo que se esperaba que fuera una DLL SelfReg. La razón es que dll no pudo encontrar la dependencia para cargar. Creo que debes tener problemas similares. Ejecuté la herramienta Process Monitor y el filtro aplicado para capturar el evento heat.exe. Pude encontrar la causa raíz del problema. Básicamente tuve que poner toda la dependencia dll en la misma ubicación donde estaba mi dll principal. Para su caso addin.dll necesita apuntar a la misma ubicación donde se encuentran los dll dependientes.

El siguiente blog sobre esta advertencia me ayudó mucho a descubrir la causa raíz.

http://marc.durdin.net/2009/12/case-of-hidden-exception.html?

+1

Después de pasar casi un día configurando esto todavía no tengo nada con esto. El error que se muestra en la publicación del blog menciona una excepción lanzada por el objetivo. En mi caso, el calor arroja la excepción diciendo que el archivo no se pudo cargar. Incluso agregué todas las dependencias que aparecían en Process Monitor. Todavía consigo el error. Tal vez estoy atrapado con el auto registro de esta DLL. – Seb

11

Sé que esto es viejo, pero quería añadir una respuesta aquí - la razón de esto ocurre es porque el archivo DLL que está tratando de registrar es de 64 bit dll - y Heat.exe es de 32 bits por lo que no puede cargar el dll en su espacio de direcciones. De todos modos, solo apunta a una versión de 32 bits de la dll para crear el archivo wxs y no deberías recibir ese error.

Cuestiones relacionadas