punto puede pero entrada encontro dllunregisterserver dllregisterserver cargar com dll wix wix3

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



se cargo el modulo pero no se encontro el punto de entrada dllregisterserver (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í?


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:

<Component Id="Component" Guid="*"> <File Source="ComServer.dll"> <Class Id="PUT-CLSID-HERE" Context="InprocServer32" ThreadingModel="apartment" Description="Your server description"> <ProgId Id="Your.Server.1" Description="Your ProgId description"> <ProgId Id="Your.Server" Description="Your ProgId description" /> </ProgId> </Class> <Class Id="PUT-PROXY-CLSID-HERE" Context="InprocServer32" ThreadingModel="both" Description="Your server Proxies, assuming you have them"> <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface1" /> <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface2" /> <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface3" /> <Interface Id="PUT-INTERFACEID-HERE" Name="IInterface4" /> </Class> </File> </Component>

En definitiva, la respuesta de Troy es correcta.


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

heat.exe file <filename> -out <output wxs file>

Como en:

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


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 etiquetas Class, ProgID, TypeLib y Registry. Es posible que deba editar manualmente esa salida para que compile.

Espero que eso ayude.