2

SetOverwrite一部のファイルを無条件に置き換えるか、セットアップで新しいバージョンが提供されている場合にのみ置き換えるかを選択する状態を動的に設定しようとしています。

私はlogiclibで試しました

${if} $isReinstall = 1
    SetOverwrite on
    ${debug} "SetOverwrite on (overwrite)"
${else}
    SetOverwrite ifnewer
    ${debug} "SetOverwrite ifnewer"
${endif}
File "foo"

しかもクラシックでIntCmp

IntCmp $isReinstall 1 0 +3 +3
SetOverwrite on
goto +2
SetOverwrite ifnewer
File "foo"

しかし、何も機能していないようです。ファイルfooが既にディスクに存在する場合、常にスキップされます。私の$isReinstall存在1かどうか。

SetOverwrite(logiclib マクロに関係なく) 一連の命令の最後のステートメントが前のステートメントをオーバーロードしているようです。

SetOverwrite onディレクティブの直前に別のものを追加するFileと、ファイルは正しく置き換えられます。

私の分析は正しいですか?ファイルを置換できるかどうかを実行時にどのように判断できますか?

4

1 に答える 1

3

代わりに次のコードを使用してみてください。

${If} $isReinstall = 1
  SetOverwrite on
  File "foo"
${Else}
  SetOverwrite ifnewer
  File "foo"
${EndIf}

注意すべき重要な点は、File コマンドが If ブロック内に表示され、SetOverwrite コマンドがその下のすべての行に影響するため、これを行う必要があることです。完全な説明については、NSIS ドキュメントのこの部分を参照してください。

于 2012-10-30T16:54:16.950 に答える