我目前有两个用于我维护的产品的 WIX 安装程序。一种用于 32 位操作系统,一种用于 64 位操作系统。我不想维护两个单独的安装程序,而是想将它们组合成一个 NSIS 安装程序,该安装程序可以“确定”操作系统的“位数”,然后将适当的二进制文件复制到程序目录中。有没有人有这方面的经验并且可以提供 NSIS 可以用来制作安装程序的工作示例脚本?
问问题
9533 次
3 回答
11
x64.nsh有一些辅助宏,您可以安装到$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
于 2012-06-20T19:29:50.537 回答
4
我相信我想通了......我还没有测试过这个,但它应该可以工作......
答案是为每组文件创建两个“部分”。SEC0000
对于 32 位和SEC0001
64 位文件。然后,
!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
以便卸载程序知道要删除哪些文件......
于 2012-06-20T20:19:54.677 回答
4
对于使用 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
于 2013-06-05T16:00:52.727 回答