Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Цитата AlekseyPopovv:
А как быть с ключом "/D="? Ведь для ключа /I путь StrCpy $INSTDIR "$PROGRAMFILES\${APP}", а для ключа /P путь StrCpy $INSTDIR "$EXEDIR\${APP} Portable". »
По хорошему надо дать возможность пользователю менять путь установки для тех случаев, когда это ничего не сломает.

Это можно сделать так:
Скрытый текст
Код: Выделить весь код
; Создадим константу, которая содержит Путь установки по умолчанию
!define DEFAULT_DIR_INST "$PROGRAMFILES\SomeProgDir" 

; Запишем её в атрибут InstallDir. Это будет наш $INSTDIR по умолчанию
InstallDir "${DEFAULT_DIR_INST}" 

...

Var commandline ; переменная для считывания командной строки
Var i_CommandlineSetDir ; переменная для хранения состояния "путь взят из командной строки" да=1, нет=0

...

Function .onInit
    ; Установим переменную в ноль (путь с командной строки не считывался)
    StrCpy $i_CommandlineSetDir 0
    
    ${GetParameters} $commandline
    
    ; Если путь установки, сохранённый в установщике (в ${DEFAULT_DIR_INST}) не совпадает с текущим $INSTDIR,
    ; значит использовался NSIS параметр /D=
    ${If} "$INSTDIR" != "${DEFAULT_DIR_INST}" 
        StrCpy $i_CommandlineSetDir 1 ; установим в единицу, т.е. путь взят из командной строки
    ${EndIf}
    
    ...

    ${GetOptions} "$CMDLINE" "/P" $R0
    ${IfNot} ${Errors} ; проверка ключа /P
        ${If} $i_CommandlineSetDir = 0 ; если путь не взят из командной строки
            StrCpy $INSTDIR "$EXEDIR\${APP} Portable" ; меняем его на свой
        ${EndIf}
    ${EndIf}

    ...

FunctionEnd
Это сообщение посчитали полезным следующие участники:

Отправлено: 02:47, 27-10-2019 | #2375