我有一个有效的NSIS脚本。它编译,生成的安装程序工作正常。然而,makensis.exe返回1而不是0.这是一个真正的痛苦,因为我在持续集成设置中使用它,现在我的CI认为构建失败。
这刚刚开始,当我将项目从SVN切换到Git,并在NSIS脚本中做了一个小小的改动(我在两个地方改变了路径)。
然而,它返回errorlevel 1。
我确信几年前我遇到过这个问题,但我不记得我是怎么解决的。我想我刚升级到NSIS的最新版本,但这次我不能这样做(我已经使用了最新版本)。
答案 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调用。当然,这引出了永恒的问题:“这是如何运作的?”