5

Estoy usando el instalador VS2008 (más una acción personalizada de Orca) para crear un instalador para mi producto .NET.¿Cómo puedo hacer que mi instalador VS2008 x86 instale ensamblajes x64 en x64?

Recientemente descubrí que uno de los ensamblajes de terceros que estaba usando es específico de x86 (ya que incluye algunos códigos nativos); por lo tanto, los clientes de x64 estaban bloqueados al inicio con errores sobre el ensamblaje que no eran apropiados para su plataforma.

Envié a dicho cliente una copia de la versión x64 de este ensamblado de otro fabricante, y le dije que simplemente lo copiara sobre el existente x86. Funcionó, dulce! Así que ahora solo necesito que el instalador haga esto por mí.

Esto realmente parece no trivial :(. Idealmente, solo quiero que el instalador (que sería x86, ya que puede ejecutarse en ambas plataformas) incluya tanto las versiones x86 como x64 de este ensamblado de terceros e instale el En otras palabras, quiero un único instalador que facilite la vida de mis usuarios.

Pensé que había funcionado, usando declaraciones condicionales de MSI y todo eso. Pero aparentemente no ... los proyectos de configuración de VS2008 no se compilará a menos que especifique "x86" o "x64". Si especifica x86, genera un error de compilación que indica que no puede incluir el ensamblado x64. Si especifica x64, el resultado no se puede ejecutar en una computadora x86 ¡Maldición!

Alguien debe haber tenido este problema antes. Lamentablemente, Google no es útil, ¡así que recurro a StackOverflow!

Respuesta

3

Si le entiendo correctamente, quiere hacer una copia de un archivo si está instalando en x86 y en un archivo diferente (con el mismo nombre) si está instalando en una plataforma x64.

En primer lugar, no puede crear una MSI para 2 plataformas diferentes, ya que una x64 MSI simplemente no se ejecutará en una plataforma x86 y una x86 MSI se instalará utilizando WOW64 en una plataforma x64.

Por otro lado, PUEDE crear una x86 MSI que contenga 2 versiones diferentes de un archivo y copiar selectivamente el archivo apropiado durante la instalación.

La manera más fácil es usar WIX (V3) en lugar del generador MSI VS2008 incorporado.WIX le brinda un mayor control sobre lo que se instala en la máquina del cliente y dónde, la capacidad de generar diferentes instaladores para diferentes plataformas y soporte total de MSBuild como una ventaja adicional. (Ver http://wix.sourceforge.net para obtener más información.)

En caso si usted está preguntando que WIX se encuentra todavía en beta, los archivos MSI generados son perfectamente bien y nunca me encontré con un insecto todavía. (Y desarrollo proyectos de configuración para ganarse la vida.)

Finalmente, puede verificar con la propiedad VersionNT64 si un instalador x86 se está ejecutando en una plataforma x64. Si esa propiedad está presente, está ejecutando x64; de lo contrario, se ejecuta en un x86.

Espero que esto ayude.

+0

Gracias; esta es la mejor solución, creo. Cuando dice "se instalará un MSI x86 usando WOW64 en una plataforma x64", ¿significaría que mi aplicación terminaría siendo WOW64? Y supongo que eso es malo. Así que, al final, ¿podría tener algún tipo de boostrapper para elegir entre MSI? – Domenic

+0

"¿significaría esto que mi aplicación terminaría siendo WOW64?" - Sí, significaría exactamente eso. Su aplicación se ejecutará como un proceso de 32 bits en una máquina de 64 bits porque está instalada en la carpeta "Archivos de programa (x86)". Un programa de arranque x86 es una solución que puedes usar para iniciar selectivamente el MSI apropiado. –

6

Cuando analicé esto hace un año, llegué a la conclusión de que no era posible. Vale la pena señalar que muchos archivos MSI suministrados por Microsoft vienen en sabores x86 y x64 por separado, y presumiblemente, solo entregarían un solo archivo si fuera posible.

1

He tenido cierto éxito al utilizar dos funciones para incluir selectivamente los dos conjuntos de archivos (¡en componentes separados, por supuesto, con sus identificadores de archivos individualizados!).

La instalación debe estar marcada como x32 para instalar tanto en x32 como en x64. Siempre se instalará en los directorios x32 y se tratará en gran medida como una aplicación de 32 bits que se ejecuta bajo WOW.

Al utilizar la propiedad VersionNT64 puede determinar si hay una instalación de Windows 64 e instalar los archivos que necesita condicionalmente.

No estoy seguro de cuánta de esta funcionalidad está disponible en los proyectos de instalación de VS2008: estoy usando otras herramientas comerciales para configurar el instalador de esta manera. Por supuesto, puede usar Orca para hacerlo también, aunque no fue trivial hacerlo funcionar con herramientas comerciales y Orca es mucho más difícil.

Cuestiones relacionadas