为什么makensis.exe会返回errorlevel 1,即使它有效?

时间:2011-01-26 18:52:51

标签: nsis batch-file errorlevel

我有一个有效的NSIS脚本。它编译,生成的安装程序工作正常。然而,makensis.exe返回1而不是0.这是一个真正的痛苦,因为我在持续集成设置中使用它,现在我的CI认为构建失败。

这刚刚开始,当我将项目从SVN切换到Git,并在NSIS脚本中做了一个小小的改动(我在两个地方改变了路径)。

  • 我找不到打印的编译错误(即使用/ V4)。
  • 有6个警告,但它们与旧回购中的6个相同,其中makensis返回0.
  • 我使用新的“errorlevel = 1”输出区分了前一个“errorlevel = 0”输出,发现没有显着差异。
  • 它生成一个工作正常的安装程序。
  • 我仍然使用与makensis.exe完全相同的副本。

然而,它返回errorlevel 1。

我确信几年前我遇到过这个问题,但我不记得我是怎么解决的。我想我刚升级到NSIS的最新版本,但这次我不能这样做(我已经使用了最新版本)。

1 个答案:

答案 0 :(得分:1)

没关系。

问题出在我的批处理文件中,执行了makensis.exe。它有这样的东西:

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

问题是%errorlevel%在循环开始时被评估为常量值。为了实际检查循环中的错误级别,您必须使用!errorlevel!而不是%errorlevel%。此外,您必须在批处理文件的顶部放置SETLOCAL ENABLEDELAYEDEXPANSION(我已经有了)。

显然,一些先前不重要的步骤(可能mkdiring已经存在的目录)返回错误级别1然后我的检查认为它来自makensis调用。当然,这引出了永恒的问题:“这是如何运作的?”