可以使用一个 NSIS 安装程序在 32 位操作系统上安装 32 位二进制文件,在 64 位操作系统上安装 64 位二进



我目前有两个 WIX 安装程序用于我维护的产品。一个用于 32 位操作系统,一个用于 64 位操作系统。与其维护两个单独的安装程序,我想将它们组合成一个 NSIS 安装程序,该安装程序可以"确定"操作系统的"位数",然后将相应的二进制文件复制到程序目录中。有没有人对此有任何经验,并且可以提供NSIS可用于制作安装程序的工作示例脚本?

x64.nsh 有一些帮助程序宏,您可以安装到 $programfiles32$programfiles64

编辑:

Function .onInit
StrCpy $instdir $programfiles32MyApp
${If} ${RunningX64}
  StrCpy $instdir $programfiles64MyApp
${EndIf}
FunctionEnd
...
Section
Setoutpath $instdir
${If} ${RunningX64}
  File /r build64*
${Else}
  File /r build32*
${EndIf}
SectionEnd

我相信我想通了...我还没有测试过这个,但它应该可以工作...

答案是为每组文件创建两个"部分"。 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函数也需要相同的逻辑,以便卸载程序知道要删除哪些文件......

对于使用 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:foo64-bitsome-utility.exe"
sectionEND

相关内容

  • 没有找到相关文章

最新更新