2011-01-26 89 views
2

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

这只是当我将项目从SVN切换到Git,并在NSIS脚本中做了一个微小的更改(我在两处更改了路径)。

  • 我找不到编译错误(即使使用/ V4)。
  • 有6个警告,但它们是相同的6它在老回购,其中makensis返回0。
  • 我显示差异以前,“ERRORLEVEL = 0”与新“ERRORLEVEL = 1”输出端输出,并没有发现显着差异。
  • 它生产的安装程序工作正常。
  • 我仍然使用makensis.exe的相同确切副本。

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

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

回答

1

没关系。

问题出在执行makensis.exe的批处理文件中。它有这样的事情:

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

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

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

+0

您可以将该代码更改为:makensis.exe“%% A”&&(如果选中,则跳过错误级别 – Anders 2011-01-26 23:38:07

相关问题