2

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

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

  • 我可以找到没有打印的编译错误(即使使用 /V4)。
  • 有 6 个警告,但它们与 makensis 返回 0 的旧仓库中的 6 个相同。
  • 我将先前的“errorlevel=0”输出与新的“errorlevel=1”输出进行了比较,发现没有显着差异。
  • 它会生成一个运行良好的安装程序。
  • 我仍在使用与 makensis.exe 完全相同的副本。

然而,它返回错误级别 1。

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

4

1 回答 1

1

没关系。

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

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

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

所以很明显,之前的一些不重要的步骤(可能是 mkdiring 一个已经存在的目录)正在返回错误级别 1,然后我的检查认为它来自 makensis 调用。当然,这引出了一个永恒的问题:“这是怎么做到的?”

于 2011-01-26T19:25:26.680 回答