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

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

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


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

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


Если вам сложно ориентироваться в ${If} конструкциях, то лучше на начальном этапе обойдитесь без них, а когда "набьёте" руку и будете легко накидывать большинство кода - можете попробовать снова осилить конструкции с ${If}
В вашем коде не то, что все ключи будут обработаны, а инсталлятор закроется сразу после запуска с ключем /S (тихая установка), по причине, указанной выше - намудрили с конструкцией.
Для начала могу посоветовать вам форматировать свой код и писать комментарии (в первую очередь для себя), т.к. частенько при больших размерах кода или из-за недостаточного опыта (да и достаточного), можно допускать ошибки и не видеть их у себя под носом (по личному опыту)

Смотрите, как сейчас отрабатывает ваш код (ваша построенная логика):
Запускаем с ключем /S

Есть ключ /I?
Да => Отрабатываю пару команд. Выход из инсталлера
Нет => Выход из инсталлера

До проверки /P ваш код никогда не дойдёт с тихой установкой
Накидаю вам пару одинаковых примеров:

1. Если тихая установка, проверяю наличие сначала ключа I (выполняю команды), затем ключа P (выполняю команды). Если тихая установка, то выход из инсталлера после проверки ключей
Код: Выделить весь код
${If} ${Silent}
  ClearErrors
     ${GetOptions} "$CMDLINE" "/I" $R0
        ${IfNot} ${Errors} ; проверка ключа /I
         MessageBox MB_OK "ключ  /I есть"
        ${EndIf}  ; проверка ключа /I завершена
  ClearErrors
     ${GetOptions} "$CMDLINE" "/P" $R0
        ${IfNot} ${Errors}  ; проверка ключа /P
	 MessageBox MB_OK "ключ  /P есть"
        ${EndIf} ; проверка ключа /P завершена
Quit
${EndIf} ; проверка на тихую установку завершена
2. То же самое, только без ${If} конструкций
Код: Выделить весь код
${If} ${Silent}
ClearErrors
  ${GetOptions} "$CMDLINE" "/I" $R0
  IfErrors noIkey
  MessageBox MB_OK "ключ  /I есть"
noIkey:

ClearErrors
  ${GetOptions} "$CMDLINE" "/P" $R0
  IfErrors noPkey
  MessageBox MB_OK "ключ  /P есть"
noPkey:
Quit
${EndIf} ; проверка на тихую установку завершена
3. То же самое, только без ${If} конструкций и с обёрткой в функции
Код: Выделить весь код
${If} ${Silent}
ClearErrors
  ${GetOptions} "$CMDLINE" "/I" $R0
  IfErrors +2
  Call silent_I_key

ClearErrors
  ${GetOptions} "$CMDLINE" "/P" $R0
  IfErrors +2
  Call silent_P_key
Quit
${EndIf} ; проверка на тихую установку завершена
Код: Выделить весь код
Function silent_I_key
  MessageBox MB_OK "ключ  /I есть"
FunctionEnd

Function silent_P_key
  MessageBox MB_OK "ключ  /P есть"
FunctionEnd

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

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

Отправлено: 21:28, 19-10-2019 | #2362