2

動作する NSIS スクリプトがあります。コンパイルすると、生成されたインストーラーが正常に動作します。それでも、makensis.exe は 0 ではなく 1 を返します。継続的インテグレーションのセットアップでこれを使用すると、ビルドが失敗したと CI が判断するため、これは本当に苦痛です。

これは、プロジェクトを SVN から Git に切り替え、NSIS スクリプトに 1 つの小さな変更を加えたときに始まりました (パスを 2 か所変更しました)。

  • 私が見つけることができるコンパイル エラーは (/V4 を使用しても) 出力されません。
  • 6 つの警告がありますが、makensis が 0 を返した古いリポジトリにあった 6 と同じです。
  • 以前の「errorlevel=0」出力と新しい「errorlevel=1」出力を比較しましたが、大きな違いは見つかりませんでした。
  • 正常に動作するインストーラーを生成します。
  • 私は今でも makensis.exe のまったく同じコピーを使用しています。

それでも、エラーレベル 1 を返します。

数年前にこの問題があったことは確かですが、どのように解決したか思い出せません。NSIS の最新バージョンにアップグレードしたばかりだと思いますが、今回はそれができません (既に最新バージョンを使用しています)。

4

1 に答える 1

1

どうでも。

問題は、makensis.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 に答える