Я застрял на этом.
У меня есть эта функция обратного вызова в нижней части нижнего индекса (.nsh) файла.
(Как вы можете видеть, я использую LogicLib):
Function InstallFoo
MessageBox MB_OK "Within InstallFoo function"
${If} ${FileExists} "$EXEDIR\Modules\foo.zip"
MessageBox MB_OK "foo.zip found, do install it!"
nsisunz::Unzip "$EXEDIR\Modules\foo.zip" "$INSTDIR\Foo"
${Else}
MessageBox MB_OK "No foo.zip found. Do nothing"
${EndIf}
MessageBox MB_OK "End reached"
FunctionEnd
Все работает именно так, как я хочу, когда присутствует «foo.zip», но когда его нет, программа установки завершает работу, и я действительно не могу понять, почему.
Я ожидал бы, что он также сможет обрабатывать, когда 'foo.zip' не найден, то есть ничего не делать. Что происходит сейчас, это то, что установщик падает с
"setup.exe - Ошибка приложения. Инструкция в" some-address "ссылается на память в" some-other-address ". Память не может быть" прочитана ".
У меня один и тот же тип кода в разделах моих скриптов, и он отлично работает там, независимо от того, присутствуют zip-файлы или нет. Просто в этой функции обратного вызова она не работает, поэтому я начинаю думать, что это как-то связано с функцией обратного вызова.
В случае «файл foo.zip отсутствует» я получаю следующие MessageBoxes: «Внутри функции InstallFoo» «Не найден foo.zip. Ничего не делать» «Конец достигнут»
А потом крушение. У меня есть распечатка MessageBox в секции, откуда также был вызван обратный вызов, то есть первое, что произойдет после возврата из функции обратного вызова, но она никогда не доберется туда.
Обратите внимание, как только файл foo.zip будет работать, все будет отлично!
Кто-нибудь имеет представление о том, что я могу здесь делать неправильно?