Цитата Dodakaedr:
Объясните, пожалуйста, почему если указать в строке 'StrCmp $R0 "0"' 0 +5 сообщение показываеться, а если +4 то нет. »
|
Потому что строки:
Код:
${registry::MoveKey} "HKCU\SOFTWARE\11" "HKCU\SOFTWARE\11_backup" $R4
${registry::Unload}
это не команды, а макросы, а в макросах может содержаться несколько команд
Макрос в NSIS своеобразная "оболочка" для команд, в макросы можно заключить несколько часто используемых команд+удобно потом ориентироваться в коде
Т.е. прописывая сроку с макросом, при компиляции эта самая строка может развернуться в несколько десятков строк (в зависимости от команд, которые прописаны в теле макроса) и, соответственно, при использовании всяких +2 +3 +5 прыжков на строку, которая прописана за макросом, может оказаться проблемой и вы получите нерабочий/не правильно работающий код
Конкретно в вашем коде - макрос
${registry::MoveKey} содержит в себе 2 строки команд:
Код:
!macro registry::MoveKey _PATH_SOURCE _PATH_TARGET _ERR
registry::_MoveKey /NOUNLOAD `${_PATH_SOURCE}` `${_PATH_TARGET}`
Pop ${_ERR}
!macroend
Из-за чего ваш код стал не рабочим
Для решения этой проблемы либо создавайте метку и указывайте её в качестве цели "прыжка" (за место +4), либо еще лучше, пользуйтесь конструкциями с
${If}
Код:
outfile "test.exe"
!include "Registry.nsh"
Autoclosewindow true
Silentinstall silent
section "Main"
${registry::KeyExists} "HKCU\Software\11" $R0
${If} $R0 == "0"
${registry::MoveKey} "HKCU\SOFTWARE\11" "HKCU\SOFTWARE\11_backup" $R4
${registry::Unload}
${Else}
MessageBox mb_ok|mb_iconinformation "Ключа нет"
${EndIf}
quit
sectionend