2011-01-26 91 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

相關問題