我正在尝试为我的应用程序设置正确的安装文件夹。 我是否可以检测安装程序是否适用于32位或64位系统?因为现在当我在x64系统上安装x32应用程序时,InstallDir不正确。
我有一个x32和x64安装程序的构建脚本,我使用 x64.nsh 来定义程序文件路径。但问题是:即使安装程序检测到x64系统,如果当前版本是x32,它仍将安装在“C:\ Program Files”而不是“C:\ Program Files(x86)”中。
在最糟糕的情况下,我将不得不为两个安装程序(x32,x64)创建两个构建脚本,但我想避免它。
那么,有没有办法定义安装程序是针对32位还是64位系统?
答案 0 :(得分:2)
我有同样的问题。使用包装器脚本结束,该脚本将应用程序的arch传递给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}
答案 1 :(得分:0)
如果您要安装的应用程序始终为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