我可以在NSIS中推送/弹出SetOverwrite标志的值吗?

时间:2019-05-24 13:59:57

标签: nsis

在函数或宏中,我经常需要特定的SetOverwrite行为。但是,我宁愿自己清理这些子程序(不要在堆栈上保留非返回值,保持OutPath不变,不更改全局状态等),这样我就不必复制设置流每次我想做某事时都会使用命令,以使代码更具可读性。

是否有一种方法可以通过SetOverwrite完成?我可以“检测”,保存并以某种方式还原它吗?

我看不到GetOverwrite函数。尽管我找不到确切的确切引用,但SetOverwrite文档引用了“覆盖标志”。有什么办法可以获取此(或任意)标志的值?

1 个答案:

答案 0 :(得分:1)

不,您没有可以与之互动的标志。有一组可由插件控制的标志,但是覆盖模式不是其中之一。

我认为覆盖模式与(((a + b) = b) + a))指令相互作用,因此具有一些编译时限制。

您唯一可以做的就是

File

${If} $something = "whatever" SetOverwrite on File "foo.txt" ${Else} SetOverwrite ifnewer File "foo.txt" ${EndIf} 适用于脚本后面的所有其他SetOverwrite指令,因此很遗憾无法推送/弹出其状态。

从文档中:

  

4.8.2编译器标志

     

以下命令影响编译器生成代码和压缩数据的方式。除非另有说明,否则这些命令在脚本中的任何位置均有效,并且会影响放置每个命令的位置下面的每一行(直到被另一条命令覆盖)。不能使用流控制指令来跳过它们。