Строка, заканчивающаяся ${|}
, указывает блок if, который выполняет одну инструкцию, если условие выполняется:
${IfThen} $Instdir == $Temp ${|} MessageBox mb_ok "$$InstDir equals $$Temp" ${|}
Это всего лишь сокращенный синтаксис для:
${If} $Instdir == $Temp
MessageBox mb_ok "$$InstDir equals $$Temp"
${EndIf}
Макрос IfCmd использует ${IfThen} ${Cmd}
для внутреннего использования, а ${||}
является хаком для завершения кавычки строки, начатой IfCmd, поэтому:
${IfCmd} MessageBox MB_YESNO "click yes" IDYES ${||} MessageBox mb_ok choice=IDYES ${|}
является сокращением для:
${If} ${Cmd} 'MessageBox MB_YESNO "yes" IDYES' ;notice the quotes here
MessageBox mb_ok choice=IDYES
${EndIf}
Вы можетедаже смешивать ifthen и метки, но это ужасно IMHO:
StrCpy $0 "Cancel"
${IfCmd} MessageBox MB_YESNOCANCEL "Mr. Powers?" IDYES yes IDNO ${||} StrCpy $0 "NO?!" ${|}
MessageBox mb_iconstop $0 ;Cancel or NO
goto end
yes:
MessageBox mb_ok "Yeah baby yeah!"
end:
(Лучше просто использовать метки с MessageBox для YESNOCANCEL и ABORTRETRYIGNORE, для YESNO, OKCANCEL и т. д., которые выполняют разные коды для обоих вариантов выбора,используйте синтаксис $ {If} $ {Cmd} 'MessageBox ..' .. $ {Else} .. $ {EndIf})