2009-12-17 5 views
17

Trabajo en un instalador basado en WIX.Cómo implementar el instalador único para las plataformas 32 y 64

El instalador se compila en 32 y 64 plataformas por separado. Las versiones de los instaladores son muy similares en ambas plataformas, pero pocos pasos condicionales como evitar el registro de x64 dlls nativos en el instalador de 32 bits.

¿Hay alguna forma de unir ambos instaladores a uno?

Respuesta

27

No se puede hacer. Es una limitación de Windows Installer, si desea hacer esto sin hacerlo el doble de grande, entonces necesitará dos MSI con archivos CAB externos y un programa de arranque para ejecutar la instalación correcta.

Si no necesita una MSI, intente NSIS. Puede realizar una instalación condicional basada en la arquitectura del sistema operativo con bastante facilidad.

De todos modos, this has been also asked on the WiX-users list un número de veces en las últimas semanas, la mejor respuesta que puedo encontrar es éste de Blair:

un MSI marcado como 64 bits simplemente no va a instalar en un sistema de 32 bits . Nada que pueda hacer.

Una MSI marcada como de 32 bits simplemente no puede colocar archivos en un "directorio de 64 bits" (se los redireccionará a las carpetas "equivalentes" de 32 bits). Nada que pueda hacer.

Un MSI no puede marcarse como 32 y 64 bits. Tampoco nada que puedas hacer.

El método "correcto" es generar dos MSI, uno para plataformas de 32 bits y otro para plataformas de 64 bits. Pueden compartir los mismos archivos cab externos si necesita enviarlos juntos para ahorrar espacio. Si lo hace, puede usar un bootstrapper para extraer el apropiado con su CAB (s) e instalarlo.

+1

Gracias sascha, ¡esto es muy útil! El NSIS parece genial también, me gustaría saber si antes, podría habernos conseguido un instalador mucho más simple :) – Elisha

+0

Eso no es del todo cierto ... Estoy intentando instalarlo en la carpeta System32 usando una compilación x86 en un sistema operativo de 64 bits, y copia las bibliotecas siempre en la carpeta de 64 bits en lugar de en la carpeta 32. Por lo tanto, no se redirecciona automáticamente ... – Sonhja

1

No sé lo suficiente sobre WiX para decirlo con certeza, pero la evidencia anecdótica sugiere que esto no es recomendable. Me acuerdo de todas las descargas que veo (MSDN y muchas otras) donde debe seleccionar entre el instalador de 32 bits y el de 64 bits. De hecho, ahora que lo pienso nunca he visto ni oído hablar de un "instalador universal".

+0

Gracias por la respuesta. Estoy de acuerdo con que la mayoría de los instaladores tienen versiones separadas, ¿sabes por qué? Es beneficioso para los usuarios tener menos preocupaciones. Todavía soy curioso de saber si es posible. – Elisha

+0

Creo que la razón más probable es que pocos o ningún archivo se comparten entre las versiones de 32 y 64 bits, por lo que un instalador combinado sería al menos el doble. Entonces, es posible, pero sería inconveniente tener que descargar los archivos de 32 bits si quiere 64 bits y viceversa. –

3

Es posible, hasta cierto punto. Sin embargo, no puedes hacerlo solo con un MSI. Un ejemplo de esto son los paquetes de instalador .NET de Microsoft; el paquete "instalación completa" tiene soporte x86 bit, x64 bit y ia64. Sin embargo, este instalador usa un proceso de arranque para hacerlo; tiene un programa separado que determina exactamente qué instalar y luego lo instala. Debajo, aún necesita los paquetes MSI de 32 bits y MSI de 64 bits.

Sea advertido; la arquitectura del arranque de tu instalador determinará en qué se puede instalar. Si se trata de un programa de arranque basado en x86, solo funcionará en ventanas de 32 bits y de 64 bits que tengan instalado WOW64 (una opción extraíble con Win2k8 R2) y puede que no funcione en absoluto en las plataformas ia64.

Es mucho más simple proporcionar instaladores separados que realmente no vale la pena agruparlos. Doblará o triplicará el tamaño del instalador, lo que puede provocar la desaparición de algunos clientes. Si se trata de una herramienta interna, entonces realmente no hay inconvenientes: tener el msi sin procesar disponible permite muchas más opciones de instalación (remota).

En resumen: sí, puede, pero no con un MSI.

1

Puede intentar usar la variable de entorno PROCESSOR_ARCHITECTURE en etiquetas condicionales para los componentes del registro solo lo que se debe registrar para una arquitectura específica y esto se aplicará cuando se ejecute el MSI ... no cuando esté construido.

ejemplo, para detectar 64 bits OS:

<Component Id="..." Guid="PUT-GUID-HERE"> 
    <Condition>NOT(%PROCESSOR_ARCHITECTURE = "x86")</Condition> 
    ... 
</Component> 


Ejemplo de detectar 32 bits OS:

<Component Id="..." Guid="PUT-GUID-HERE"> 
    <Condition>%PROCESSOR_ARCHITECTURE = "x86"</Condition> 
    ... 
</Component> 


Si desea saber más acerca de hacer referencia variables de entorno en MSI ver Esta página: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx#Access_Prefixes

Para obtener más información sobre qué es exactamente PROCESSOR_ARCHITECTURE volverá en qué circunstancias, ver esta página: https://superuser.com/q/396267/117857

Sin embargo, como se ha dicho en los comentarios de esta respuesta, esto puede no ser verdad lo que estás buscando. Pero creo (no verificado) que podría crear un bootstrapper que contenga tanto MSI de 32 bit como de 64 bit y luego hacer que el programa de arranque elija qué MSI aplicar en tiempo de ejecución dependiendo de la arquitectura del sistema operativo, aunque no lo he intentado y no lo haría Sé exactamente cómo hacerlo, si me entero, definitivamente publicaré la respuesta.

+1

Eso no le permitirá mezclar componentes de 64 bits y 32 bits en paquetes de 32 bits. Esa es una regla/limitación de MSI. –

+0

@BobArnson Bueno, parece ser lo más parecido a lo que he encontrado. – bsara

Cuestiones relacionadas