NSIS 安装程序中的版本比较

Version comparison in NSIS installer

我必须比较当前文件的版本和已经安装在 NSIS 安装程序中的版本。我知道版本号是字符串,但我在几个地方读到,如果逻辑操作需要,NSIS 会自动将字符串转换为整数。

为了测试,我编写了以下脚本:

Var Test1
Var Test2

section
    StrCpy $Test1 "4.3.1.50245"
    StrCpy $Test2 "4.2.1.50245"

    ${If} $Test1 > $Test2
        MessageBox MB_ICONSTOP  "$Test1 is bigger than $Test2" 
    ${Else}
        MessageBox MB_ICONSTOP  "$Test2 is bigger than $Test1" 
    ${EndIf}
    Quit
    sectionEnd

问题: 它给我的结果是 4.2.1.502454.3.1.50245 大。但是,如果我尝试比较 4.2.1.502453.2.1.50245(或者如果我比较 5024540256 等)

,它会给出正确的结果

查看以下功能,版本比较 http://nsis.sourceforge.net/VersionCompare

Section
  ${VersionCompare} "1.1.1.9" "1.1.1.01" $R0
  ; $R0="1"
SectionEnd
; Result:
;   $var=0  Versions are equal
;   $var=1  Version1 is newer
;   $var=2  Version2 is newer

如果不是,另一种方法是实现字符串的分解,然后比较 Major、Minor、Revision、...部分。但这可能有点矫枉过正: http://nsis.sourceforge.net/Explode