NSIS:在 3.X 个版本之间切换

NSIS: Switch between 3.X versions

我想让我的脚本与 nsis-3.03nsis-3.04 兼容。我知道这个:

!if 0n1 > 0 ; >= 3.0b0 
!endif

但是我不明白为什么0n1 > 0就是>= 3.0b0

我想做类似

的事情
!if ... ; version=[3.0-3.3]
    ; do stuff
!else if  .., ; version > 3.3
    ; do other stuff
!else
     ; pass
!endif

我不能使用 ${NSIS_PACKEDVERSION},因为它在基于 debain 的系统上构建错误。

!if 0n1 > 0 ; >= 3.0b0 之所以有效,是因为旧版本不理解 0n1 并将其视为 0,因此它在旧版本中变为 0 > 0

NSIS v3.04 及更高版本强制 NSIS_PACKEDVERSION 成为一个有点可用的值,即使在编译时没有人指定版本。

要检测在 .NSH 中实现的特定功能,您只需检查定义或宏是否存在,无需进行版本检查:

!include x64.nsh
!ifdef IsNativeMachineArchitecture
...
!else
...
!endif