【问题标题】:NSIS installer - define installer and system x32/x64NSIS 安装程序 - 定义安装程序和系统 x32/x64
【发布时间】:2013-10-22 20:35:18
【问题描述】:

我正在尝试为我的应用程序设置正确的安装文件夹。 我可以检测安装程序是针对 32 位还是 64 位系统的吗? 因为现在我在 x64 系统上安装 x32 应用程序时,InstallDir 不正确。

我有一个用于 x32 和 x64 安装程序的构建脚本,我使用 x64.nsh 来定义程序文件路径。但这里有个问题:即使安装程序检测到 x64 系统,如果当前版本是 x32,它仍然会安装在“C:\Program Files”而不是“C:\Program Files (x86)”。

在最坏的情况下,我将不得不为两个安装程序(x32、x64)创建两个构建脚本,但我想避免它。

那么,有没有办法定义 installer 是用于 32 位系统还是 64 位系统?

【问题讨论】:

    标签: windows path installation 64-bit nsis


    【解决方案1】:

    我遇到了同样的问题。最终使用了一个包装脚本,该脚本将应用程序的拱门传递给 nsi 脚本 (makensis.exe /DARCH=x86/x64) 以及在 nsi 脚本本身中的类似内容:

    ${If} ${RunningX64}
      ${If} ${ARCH} == "x64"
        StrCpy $InstDir "$PROGRAMFILES64\${PROGNAME}"
      ${Else}
        StrCpy $InstDir "$PROGRAMFILES32\${PROGNAME}"
      ${Endif}
    ${Else}
      ${If} ${ARCH} == "x64"
        Quit
      ${Else}
        StrCpy $InstDir "$PROGRAMFILES\${PROGNAME}"
      ${Endif}
    ${EndIf}
    

    【讨论】:

      【解决方案2】:

      如果您要安装的应用程序始终是 32 位,则只需使用 InstallDir "$ProgramFiles\MyApp"

      如果安装程序同时包含同一应用的 32 位和 64 位版本,并且您想安装“本机”版本,则必须在 .onInit 中自行设置 $InstDir:

      !include LogicLib.nsh
      !include x64.nsh
      ; Don't use InstallDir[RegKey] so $InstDir is empty by default
      
      Function .onInit
      ${If} $InstDir == "" ; Don't override setup.exe /D=c:\custom\dir
          ${If} ${RunningX64}
              StrCpy $InstDir "$ProgramFiles64\MyCompany\MyApp"
          ${Else}
              StrCpy $InstDir "$ProgramFiles32\MyCompany\MyApp"
          ${EndIf}
      ${EndIf}
      FunctionEnd
      
      Section
      SetOutPath $InstDir
      ${If} ${RunningX64}
          File "AMD64\myapp.exe"
      ${Else}
          File "i386\myapp.exe"
      ${EndIf}
      SectionEnd
      

      【讨论】:

      • 首先,感谢您的回答,这很有帮助。然而,问题更复杂。当我使用您的 .onInit 函数构建 X32 安装程序时,当我在 X64 系统上运行它时,instdir 始终是“C:\Program Files”,并且似乎无法更改它。我必须将 x32/x64 应用程序安装到同一文件夹但在正确的 PROGRAMFILES 目录中(“C:\Program Files\Company\” 或“C:\Program Files (x86)\Company\”)我最终制作了两个安装程序: - x32 ver 对两个系统都使用 $PROGRAMFILES32 - x64 ver 对 x64 使用 $PROGRAMFILES64 并阻止 x32 运行
      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      相关资源
      最近更新 更多