Наличие InstallDir в блоке IF ELSE

Я пытаюсь получить следующий код из

; The default installation directory
InstallDir $PROGRAMFILES\${PRODUCT_NAME}

to

!include x64.nsh
${If} ${RunningX64}
    ; The default installation directory
    InstallDir $PROGRAMFILES\${PRODUCT_NAME}
${Else}
    ; The default installation directory
    InstallDir $PROGRAMFILES64\${PRODUCT_NAME}
${EndIf}

Я получаю следующую ошибку: -

!insertmacro: _If
Error: Can't add entry, no section or function is open!
Error in macro _RunningX64 on macroline 2
Error in macro _If on macroline 9
Error in script "C:\Users\yccheok\Desktop\mysoftware.nsi" on line 17 -- aborting creation process

Есть ли способ установить значение для InstallDir в блоке if else?


person Cheok Yan Cheng    schedule 28.11.2011    source источник


Ответы (1)


Если вам нужен динамический $InstDir, вы вообще не должны использовать InstallDir, а установите $InstDir в .onInit:

Installdir ""
!include LogicLib.nsh
!include x64.nsh

Function .onInit
${If} $InstDir == "" ; /D= was not used on the command line
    ${If} ${RunningX64}
        StrCpy $InstDir "c:\foo"
    ${Else}
        StrCpy $InstDir "c:\bar"
    ${EndIf}
${EndIf}
FunctionEnd

Ваш текущий блок if else не имеет никакого смысла, потому что вы выбираете 32-битные программные файлы на x64 и 64-битные программные файлы на x86! Можно использовать $PROGRAMFILES64 на x86, поэтому, если вам всегда нужны «настоящие» программные файлы, вы можете использовать $PROGRAMFILES64 для всех платформ...

person Anders    schedule 28.11.2011
comment
$PROGRAMFILES64 для всех платформ - это хороший совет. Кстати, ключ /D= не использовался в случае обработки командной строки, так как мои пользователи большую часть времени просто дважды щелкают установщик. - person Cheok Yan Cheng; 29.11.2011
comment
@YanChengCHEOK Нет, это не важно, но /D переопределит InstallDir, поэтому совместимость не повредит;) - person Anders; 29.11.2011
comment
Спасибо! Проблема со мной заключалась в том, что я пытался сделать это за пределами .onInit. - person thameera; 06.10.2014