Actualmente tengo dos instaladores WIX para un producto que mantengo. Uno para sistemas operativos de 32 bits y otro para sistemas operativos de 64 bits. En lugar de mantener dos instaladores separados, quiero combinarlos en un instalador NSIS que pueda "determinar" el "bitness" del SO y luego copiar los binarios apropiados en el directorio del programa. ¿Alguien ha tenido alguna experiencia con esto y podría proporcionar un script de muestra de trabajo que NSIS puede usar para crear el instalador?Utilice un instalador de NSIS para instalar binarios de 32 bits en sistemas operativos de 32 bits y binarios de 64 bits en sistemas operativos de 64 bits.
Respuesta
x64.nsh tiene algunas macros de ayuda y se puede instalar en $programfiles32
o $programfiles64
Editar:
Function .onInit
StrCpy $instdir $programfiles32\MyApp
${If} ${RunningX64}
StrCpy $instdir $programfiles64\MyApp
${EndIf}
FunctionEnd
...
Section
Setoutpath $instdir
${If} ${RunningX64}
File /r build\64\*
${Else}
File /r build\32\*
${EndIf}
SectionEnd
Creo que lo he descubierto ... No he probado esto todavía, pero debería funcionar ...
La respuesta es crear dos "secciones" para cada conjunto de archivos. SEC0000
para 32 bits y SEC0001
para archivos de 64 bits. Entonces,
!include x64.nsh
Function .onInit
#Determine the bitness of the OS and enable the correct section
${if} ${RunningX64}
SectionSetFlags ${SEC0001} 17
SectionSetFlags ${SEC0000} 16
${else}
SectionSetFlags ${SEC0001} 16
SectionSetFlags ${SEC0000} 17
${endif}
FunctionEnd
creo que será necesaria la misma lógica en la función un.onInit
demasiado por lo que el desinstalador sabe qué archivos para eliminar ...
Use las macros de ayuda en sections.nsh para seleccionar/deseleccionar secciones ... – Anders
Para un simple instalador universal, usando 3.0a0, me encontré con un poco de experimentación que los siguientes trabajó para mí:
!include x64.nsh
Function .onInit
#Determine the bitness of the OS and enable the correct section
${If} ${RunningX64}
SectionSetFlags ${SEC0000} ${SECTION_OFF}
SectionSetFlags ${SEC0001} ${SF_SELECTED}
${Else}
SectionSetFlags ${SEC0001} ${SECTION_OFF}
SectionSetFlags ${SEC0000} ${SF_SELECTED}
${EndIf}
FunctionEnd
sólo tenía que recordar poner la función después de las secciones de referencia. Cada una de mis secciones simplemente hacía referencia a un .exe con el mismo nombre en sus respectivos directorios de 32 bits/y 64 bits, por lo que mi desinstalador no requería ningún tratamiento especial. No lo he probado en un sistema de 32 bits, pero funcionó para un sistema de 64 bits.
Ejemplo:
section "64-bit" SEC0001
messageBox MB_OK "64-BIT!"
File "C:\foo\64-bit\some-utility.exe"
sectionEND
para esto necesitará' ! incluya "Sections.nsh" 'en su secuencia de comandos ya que' SF_SELECTED' seleccionado es parte de 'Sections.nsh' – icc97
- 1. Importar archivos dll externos basados en sistemas operativos de 64 bits o 32 bits
- 2. Ejecute AnyCPU como 32 bits en sistemas de 64 bits
- 3. 64 bits por división de 32 bits
- 4. En sistemas de 64 bits, ¿una columna de 32 bits ocupa menos espacio que uno de 64 bits?
- 5. Mezcla de 32 bits y 64 bits P/Invoca
- 6. ¿Aplicación de 32 bits o de 64 bits en el sistema operativo de 64 bits?
- 7. Registros de 64 bits en ventanas de 32 bits
- 8. Compilación de 32 bits con llvm-gcc de 64 bits
- 9. Eclipse 32 bits ejecutándose en 64 bits JVM
- 10. Objeto compartido/bibliotecas mixtas de 32 bits y 64 bits
- 11. MapViewOfFile compartido entre procesos de 32 bits y 64 bits
- 12. conversión de aplicación .NET 32 bits a 64 bits
- 13. Aplicaciones Java de 64 bits: ¿Se requiere un SO de 64 bits, un JRE de 64 bits y una Aplicación de 64 bits?
- 14. Determinación de Windows de 64 bits frente a 32 bits
- 15. Inno RegKeyExists de configuración en sistemas de 64 bits
- 16. QtCreator en Linux: 32 bits frente a 64 bits
- 17. Agregar números de 64 bits con aritmética de 32 bits
- 18. Interoperabilidad de 32 y 64 bits en Windows de 64 bits
- 19. Escribiendo al registro de 64 bits desde el instalador de 32 bits
- 20. Puerto 32 bits Controlador de Windows a 64 bits Windows
- 21. Compatibilidad con Java de 32 bits frente a 64 bits
- 22. ¿iPhone OS es de 64 bits o 32 bits?
- 23. ¿Hay alguna manera de forzar que una aplicación compilada de "Cualquier CPU" se ejecute en modo de 32 bits en sistemas operativos de 64 bits?
- 24. División de 64/32 bits en un procesador con división de 32/16 bits
- 25. Instalar controladores de 32 y 64 bits con Wix?
- 26. ¿Cómo fuerzo Python para ser de 32 bits en Snow Leopard y otras preguntas de 32 bits/64 bits
- 27. ¿Es ctypes.c_long de 64 bits de Python en sistemas de 64 bits?
- 28. Siempre es de 64 bits en las máquinas de 32 y 64 bits
- 29. ¿Construye 32 bits en Linux de 64 bits utilizando un script configure de automake?
- 30. WiX: Impida que el instalador de 32 bits se ejecute en Windows de 64 bits
hice vistazo a esto y que me permite determinar el valor de bits del sistema operativo, pero sigo con el problema donde tengo que decirle al instalador qué ficheros instalar. Actualmente tengo una "sección" que contiene esto: 'SetOutPath $ {PROGRAMINSTALL} Archivo/r build \\ *' Así que no estoy seguro de que el módulo x64 ayudaría en esta situación ... –
Además, yo ' m no instalo binarios de 32 bits en un sistema de 64 bits ... Estoy instalando archivos de 64 bits en sistemas operativos de 64 bits y archivos de 32 bits en sistemas operativos de 32 bits ... –
@JulianEasterling esto no dice el sistema que archivos para instalar. Si coloca archivos de 64 bits en los archivos 'build \ 64' y 32-bit en' build \ 32'. Si también necesita cambiar el directorio de instalación según la arquitectura, puede poner 'SetOutPath' dentro de If/Else – icc97