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 回答