我正在尝试为我的应用程序设置正确的安装文件夹。 我可以检测安装程序是32位还是64位系统? 因为现在当我在x64系统上安装x32应用程序时,InstallDir不正确。
我有一个用于x32和x64安装程序的构build脚本,我使用x64.nsh来定义程序文件path。 但问题是:即使安装程序检测到x64系统,如果当前版本是x32,它仍将安装在“C:\ Program Files”而不是“C:\ Program Files(x86)”中。
在最坏的情况下,我将不得不为两个安装程序(x32,x64)创build两个构build脚本,但是我想避免它。
那么,有什么方法可以定义安装程序是32位还是64位系统?
我遇到过同样的问题。 结束语使用一个包装脚本,在nsi脚本本身中将应用程序的脚本传递给nsi脚本(makensis.exe / DARCH = x86 / x64)等等。
${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}
如果您正在安装的应用程序始终是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