【问题标题】:Version comparison in NSIS installerNSIS 安装程序中的版本比较
【发布时间】:2017-05-25 04:45:24
【问题描述】:

我必须比较当前文件的版本和已经安装在 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.50245 比4.3.1.50245 更好。但是,如果我尝试将 4.2.1.50245 与 3.2.1.50245 进行比较(或者如果我比较 50245 和 40256 等),它会给我正确的结果

【问题讨论】:

  • Skm,以下是否回答了您的问题,还是您需要进一步的帮助?
  • 对不起,我没有机会检查它。我会在检查后更新(可能在星期一)。谢谢:)
  • 您说它给您的结果是 4.2.1.50245 大于 4.3.1.50245,但实际上它是在说“大于或等于”,因为您没有相等的选项。它认为它们是相等的,因为当它将字符串转换为整数时,它们都变为 4。

标签: nsis


【解决方案1】:

查看以下功能,版本比较 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多