Если вам сложно ориентироваться в ${If} конструкциях, то лучше на начальном этапе обойдитесь без них, а когда "набьёте" руку и будете легко накидывать большинство кода - можете попробовать снова осилить конструкции с ${If}
В вашем коде не то, что все ключи будут обработаны, а инсталлятор закроется сразу после запуска с ключем /S (тихая установка), по причине, указанной выше - намудрили с конструкцией.
Для начала могу посоветовать вам форматировать свой код и писать комментарии (в первую очередь для себя), т.к. частенько при больших размерах кода или из-за недостаточного опыта (да и достаточного), можно допускать ошибки и не видеть их у себя под носом (по личному опыту)
Смотрите, как сейчас отрабатывает ваш код (ваша построенная логика):
Запускаем с ключем /S
Есть ключ /I?
Да => Отрабатываю пару команд. Выход из инсталлера
Нет => Выход из инсталлера
До проверки /P ваш код никогда не дойдёт с тихой установкой
Накидаю вам пару одинаковых примеров:
1. Если тихая установка, проверяю наличие сначала ключа I (выполняю команды), затем ключа P (выполняю команды). Если тихая установка, то выход из инсталлера после проверки ключей
Код:
![Выделить весь код](images/misc/selectcode.png)
${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} конструкций
Код:
![Выделить весь код](images/misc/selectcode.png)
${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} конструкций и с обёрткой в функции
Код:
![Выделить весь код](images/misc/selectcode.png)
${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} ; проверка на тихую установку завершена
Код:
![Выделить весь код](images/misc/selectcode.png)
Function silent_I_key
MessageBox MB_OK "ключ /I есть"
FunctionEnd
Function silent_P_key
MessageBox MB_OK "ключ /P есть"
FunctionEnd