Почему makensis.exe возвращает errorlevel 1, даже если он работает? - PullRequest
2 голосов
/ 26 января 2011

У меня есть скрипт NSIS, который работает.Компилируется, произведенный установщик работает нормально.И все же makensis.exe возвращает 1 вместо 0. Это реальная боль, потому что я использую его в настройке непрерывной интеграции, и теперь мой CI считает, что сборка не удалась.

Это только началось, когда я переключил свой проект сSVN для Git и внес одно крошечное изменение в сценарий NSIS (я изменил путь в двух местах).

  • НЕТ напечатанных ошибок компиляции (даже с / V4), которые я могу найти.
  • Есть 6 предупреждений, но они те же 6, что и в старом репо, где makensis возвратил 0.
  • Я отправил предыдущий вывод "errorlevel = 0" с новым "errorlevel ="1 "выходной и не обнаружил существенных отличий.
  • Он производит установщик, который работает нормально.
  • Я все еще использую ту же самую точную копию makensis.exe.

И все же, она возвращает уровень ошибки 1.

Я уверен, что у меня было этопроблема пару лет назад, но я не могу вспомнить, как я ее решил.Я думаю, что я только что обновился до последней версии NSIS, но на этот раз я не могу этого сделать (я уже использую последнюю версию).

1 Ответ

1 голос
/ 26 января 2011

Nevermind.

Проблема была в моем командном файле, который выполнял makensis.exe. Это было примерно так:

for %%A in (*.nsi) do (
    makensis.exe "%%A"
    if %errorlevel% neq 0
        echo %%A Failed.
    )
)

Проблема в том, что% errorlevel% был оценен как постоянное значение в начале цикла. Чтобы действительно проверить уровень ошибки в цикле, вы должны использовать !errorlevel!, а не %errorlevel%. Также вы должны иметь SETLOCAL ENABLEDELAYEDEXPANSION в верхней части вашего пакетного файла (у меня уже было это).

Так что, очевидно, какой-то предыдущий неважный шаг (возможно, mkdiring dir, который уже существовал) возвращал уровень ошибки 1, а затем моя проверка подумала, что это был вызов makensis. Конечно, это вызывает вечный вопрос: «Как это вообще работало?»

...