Функция обратного вызова NSIS завершает работу установщика, если файл отсутствует - PullRequest
0 голосов
/ 22 января 2010

Я застрял на этом. У меня есть эта функция обратного вызова в нижней части нижнего индекса (.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 будет работать, все будет отлично!

Кто-нибудь имеет представление о том, что я могу здесь делать неправильно?

1 Ответ

0 голосов
/ 22 января 2010

Мне кажется, что я получаю сбой всякий раз, когда ничего не делается внутри функции обратного вызова.

Это то, что NSIS выделяет некоторую память для функции обратного вызова, и если она не используется, мы получаем сбой .. ?? Weird.

...