NSIS安装打包程序的版本比较方便做后续逻辑处理

Posted 一如年少模样

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSIS安装打包程序的版本比较方便做后续逻辑处理相关的知识,希望对你有一定的参考价值。

因为当时公司的项目打包卸载前期出现了一些问题,只能做个补丁来弥补,考虑到不影响后期的项目,分隔版本号,以1.0.12为分割线,判断new or old,然后分别做出不同的卸载逻辑。


1.VersionCompare:

*比较版本数字

语法:

    $VersionCompare "[Version1]" "[Version2]" $var
    "[Version1]"        ; First version
    "[Version2]"        ; Second version
    $var                ; Result:
                        ;    $var=0  Versions are equal
                        ;    $var=1  Version1 is newer
                        ;    $var=2  Version2 is newer

例子:

    Section
        $VersionCompare "1.1.1.9" "1.1.1.01" $R0
        ; $R0="1"
    SectionEnd

2.VersionConvert

*将版本号转换成数字格式然后再比较。

语法:

$VersionConvert "[Version]" "[CharList]" $var
"[Version]"         ; Version
                    ;
"[CharList]"        ; List of characters, which will be replaced by numbers
                    ; "abcdefghijklmnopqrstuvwxyz" (default)
                    ;
$var                ; Result: converted version

注意:

Converted letters are separated with dot

If character is non-digit and not in list then it will be converted to dot

例子1:

Section
    $VersionConvert "9.0a" "" $R0
    ; $R0="9.0.01"

    $VersionConvert "9.0c" "" $R1
    ; $R1="9.0.03"

    $VersionCompare "$R0" "$R1" $R2
    ; $R2="2"   version2 is newer
SectionEnd

例子2:

Section
    $VersionConvert "0.15c-9m" "" $R0
    ; $R0="0.15.03.9.13"

    $VersionConvert "0.15c-1n" "" $R1
    ; $R1="0.15.03.1.14"

    $VersionCompare "$R0" "$R1" $R2
    ; $R2="1"   version1 is newer
SectionEnd

例子3:

Section
    $VersionConvert "0.15c+" "abcdefghijklmnopqrstuvwxyz+" $R0
    ; $R0="0.15.0327"

    $VersionConvert "0.15c" "abcdefghijklmnopqrstuvwxyz+" $R1
    ; $R1="0.15.03"

    $VersionCompare "$R0" "$R1" $R2
    ; $R2="1"   version1 is newer
SectionEnd

一般不论是VersionCompare还是VersionConvert都会有返回值,我们可以根据返回值判断,做出对应的逻辑处理,提示给安装用户。


提示:用这两种方法一定记得 !include "WordFunc.nsh"


   $If $R0 == "2" ;1.012之前的版本

     StrCpy $OLD_PATH $UNINSTALL_PROG -10

     ****1.012之前的版本卸载逻辑处理**

 $Else
     ****1.012之后的版本卸载逻辑处理**

 $EndIf

以上是关于NSIS安装打包程序的版本比较方便做后续逻辑处理的主要内容,如果未能解决你的问题,请参考以下文章

NSIS - 安装程序:将套件版本与头文件定义变量进行比较,如果错误定义变量值则更新

再也不怕Winform程序打包了

NSIS打包Qt程序和Qt 安装程序的依赖,及若干问题

NSIS 打包脚本基础

NSIS问题

向 cpack 添加额外的命令 - NSIS 打包程序/安装程序