¿Cómo se registra un archivo DLL COM de Win32 en WiX 3?

Encontré un ejemplo sobre el registro de archivos DLL, el registro de un conjunto para la interoperabilidad COM en un archivo MSI con el conjunto de herramientas XML de Windows Installer. , y WiX se queja del atributo “AssemblyRegisterComInterop”.

Lo eliminé y cambié el atributo “Assembly” a win32, y dice que necesito especificar el atributo AssemblyManifest, pero ¿qué debería poner ahí?

    La forma más fácil (y Rob M va a despotricar y hablar sobre cómo está mal ) es solo usar SelfRegCost=1 en la etiqueta de archivo para la DLL.

    Esto es incorrecto, porque deberíamos controlar explícitamente el registro de la DLL, no permitiéndole simplemente ejecutar código arbitrario a través de DllRegisterServer. La teoría es que una DLL no debería hacer nada más que colocar las entradas apropiadas en el registro cuando se llama a DllRegisterServer. Desafortunadamente, muchos de ellos hacen más que eso, por lo que el registro automático podría ser la única forma de hacer que su instalación funcione.

    También es incorrecto, porque eso significa que el sistema de instalación de Windows no sabe nada sobre esas claves de registro, y sobre lo que debería y no debería estar allí. Eso significa que la reparación no funcionará, y posiblemente la desinstalación no se limpiará correctamente, etc.

    De lo contrario, puede generar el código de WiX apropiado apuntando heat.exe a su DLL e integrando su salida en su proyecto actual de WiX. Obtendrá una variedad de tags Class, ProgID, TypeLib y Registry. Es posible que deba editar manualmente esa salida para que compile.

    Espero que eso ayude.

    No soy solo yo quien va a despotricar sobre cómo SelfReg es malo. El MSI SDK le brinda una lista de siete razones por las cuales no debe usar SelfReg .

    Ejemplo:

                    

    En definitiva, la respuesta de Troy es correcta.

    Podría tratar de usar el progtwig heat.exe y luego hacer referencia al fragmento en su código wix.

      heat.exe file  -out  

    Como en:

      heat.exe file my.dll -out my.wxs