Pregunta

He estado tratando de determinar la mejor solución para registrar un servidor COM usando WiX para crear un paquete de Windows Installer y estoy luchando.

En esta publicación Archivo de ingeniería de implementación: CÓMO: Utilice Regsvr32.exe con WIX , hay una solicitud abierta para & Quot; Setup police & Quot; tomar medidas enérgicas contra el uso de regsvr32 a través de una acción personalizada exe. Sé lo malo de usar regsvr32 ya que se registra en el sistema en lugar del usuario, pero también recuerdo que OleSelfRegister puede tener problemas con un boletín de soporte de Microsoft (lo siento, no puedo encontrar el enlace), y creo recomendaron usar <=>.

¿Algún consejo?

¿Fue útil?

Solución

Leer " No utilice las tablas SelfReg y TypeLib " en:

https://msdn.microsoft.com/en-us/library / bb204770 # no_selfreg

Para WiX, eche un vistazo al elemento Componente en la referencia del esquema en:

http://wixtoolset.org/documentation/manual/v3 /xsd/wix/component.html

Tenga en cuenta ciertos elementos secundarios como AppId , Class , ProgId , Registry y así sucesivamente. La técnica adecuada es utilizar COM extraction para reflejar la información de registro y emitirla declarativamente en su instalador para que MSI pueda encargarse de usted sin pasar por alto algún código (como DllRegisterServer()) que podría fallar y no proporciona información de MSI sobre la huella del componente desde una perspectiva de reparación y publicidad.

Otros consejos

Hay una herramienta " Tallow " incluido con Wix. Puede usarlo para generar entradas de registro correctas automáticamente. Luego simplemente configura su instalación de wix para escribir esas entradas. Selfreg no debe usarse.

Como señaló @Trampster, heat.exe no hace un buen trabajo al recolectar entradas de registro de los servidores COM. Lo intenté pero los resultados fueron incompletos.

En cambio, siguiendo los consejos en Supervisar los accesos al registro (Instalar herramientas del sitio: Monitoreo) , usé InstallShield RegSpyUI. Supuestamente, esto se envía con versiones de Installshield v7 y posteriores, incluida la versión de evaluación. Esta información puede estar desactualizada; Puedo confirmar que no se suministra con el Installshield LE prácticamente inútil que viene con VS2013.

Por suerte tuve una copia de InstallShield 2010 y esto vino con RegSpyUI.

De todos modos, RegSpyUI fue muy fácil de usar: apúntelo al COM .exe, extraiga la información del registro en un archivo .reg. Luego use calor para cosechar esto en un archivo .wxs que puede agregar a su proyecto Wix

heat reg <some.reg> -gg -o <some.wxs>

Entonces es solo cuestión de modificar cualquier ruta codificada que apunte a la ubicación del COM .exe para que refleje la carpeta de instalación deseada.

p. si el archivo .wxs creado por RegSpyUI + heat tiene algo como esto

<Fragment>
    <DirectoryRef Id="TARGETDIR">
        <Component Id="blah" Guid="{xxxxxxxxxxxxxxxxxxxxxxxxx}" KeyPath="yes">
            <RegistryKey Key="TypeLib\{xxxxxxxxxxxxxxxxxxxxxx}\4.1\0\win32" Root="HKCR">
                <RegistryValue Value="C:\Users\you\projects\MyProject\dependencies\installation\COMFOO.exe" Type="string" />
            </RegistryKey>
        </Component>
    </DirectoryRef>
</Fragment>

y está instalando en su archivo wix principal para

<Directory Id="TARGETDIR" Name="SourceDir">
        <Directory Id="ProgramFilesFolder" Name="PFiles">
            <Directory Id="COMPANY" Name="My Company">
                <!--This is the actual installation folder-->
                <Directory Name="MyProduct" Id="MYPRODUCT">

luego simplemente edite la ruta RegistryValue @ value a ... " [MYPRODUCT]\COMFOO.exe "

Solo hay un inconveniente en esto: el registro de WiX Com con heat.exe no funciona para servidores .exe COM. InstallShield y sus herramientas parecen admitirlo, pero RegSpyUI es solo una herramienta de interfaz de usuario, no una que puedo ejecutar en mi máquina de compilación.

Prueba esto:

  1. Crear un nuevo proyecto .NET
  2. Agregue una referencia de proyecto al candidato dll COM o exe OOP cuyos wxs desea recopilar
  3. Busque el archivo Interop.candidate.dll (en la carpeta obj\debug)
  4. Ejecute la herramienta WiX Heat en el dll de interoperabilidad que acaba de encontrar.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top