Installation 是否可以使用一个NSIS安装程序在32位操作系统上安装32位二进制文件,在64位操作系统上安装64位二进制文件?
我目前有两个WIX安装程序用于我维护的产品。一个用于32位操作系统,一个用于64位操作系统。我不想维护两个独立的安装程序,而是想将它们组合成一个NSIS安装程序,它可以“确定”操作系统的“位”,然后将适当的二进制文件复制到程序目录中。有没有人对此有经验,可以提供NSIS可以用来制作安装程序的工作示例脚本?有一些帮助宏,您可以安装到Installation 是否可以使用一个NSIS安装程序在32位操作系统上安装32位二进制文件,在64位操作系统上安装64位二进制文件?,installation,nsis,Installation,Nsis,我目前有两个WIX安装程序用于我维护的产品。一个用于32位操作系统,一个用于64位操作系统。我不想维护两个独立的安装程序,而是想将它们组合成一个NSIS安装程序,它可以“确定”操作系统的“位”,然后将适当的二进制文件复制到程序目录中。有没有人对此有经验,可以提供NSIS可以用来制作安装程序的工作示例脚本?有一些帮助宏,您可以安装到$programfiles32或$programfiles64 编辑: Function .onInit StrCpy $instdir $programfiles32
$programfiles32
或$programfiles64
编辑:
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
我相信我已经明白了。。。我还没有测试过这个,但它应该可以工作 答案是为每组文件创建两个“部分”<对于32位文件,代码>SEC0000;对于64位文件,代码>SEC0001。那么
!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
我相信在
un.onInit
功能中也需要相同的逻辑,以便卸载程序知道要删除哪些文件…对于使用3.0a0的简单通用安装程序,我通过一些实验发现以下方法对我有效:
!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
我只需要记住将函数放在引用的部分之后。我的每个部分只是在各自的32位/和64位/目录中引用了一个同名的.exe,因此我的卸载程序不需要任何特殊处理。我还没有在32位系统上测试过它,但在64位系统上确实有效
例如:
section "64-bit" SEC0001
messageBox MB_OK "64-BIT!"
File "C:\foo\64-bit\some-utility.exe"
sectionEND
我确实看过这个,它将允许我确定操作系统的位,但我仍然遇到问题,我需要告诉安装程序要安装哪些文件。我目前有一个“部分”包含以下内容:
SetOutPath${programmainstall}File/r build\\*
,所以我不确定x64模块在这种情况下是否有帮助……另外,我没有在64位系统上安装32位二进制文件。。。我正在64位操作系统上安装64位文件,在32位操作系统上安装32位文件…@julianeastering这会告诉系统要安装哪些文件。如果将64位文件放在build\64
中,将32位文件放在build\32
中。如果您还需要根据体系结构更改安装目录,则可以将SetOutPath
放入If/els中。为此,您需要!在脚本中包含“Sections.nsh”
,因为所选的SF\u
SELECTED是Sections.nsh的一部分