If statement NSIS替代方案If、then、else、andif等

If statement NSIS替代方案If、then、else、andif等,if-statement,nsis,If Statement,Nsis,我的问题是,是否有类似于LogicLib的替代插件?一个确实支持像17.0.8.22这样的数字,因为我的程序版本在注册表中是这样的数字,而且似乎LogicLib不支持Windows 7。 它确实是这样重新命名的: ${If} $0 = '17.0.22.0' 但这是失败的/被忽视的 ${If} $0 > '17.0.22.0' 是NSIS附带的帮助程序宏的一部分…是NSIS附带的帮助程序宏的一部分…正如Anders所述,VersionCompare宏可以处理复杂的版本比较 下面是一个小

我的问题是,是否有类似于LogicLib的替代插件?一个确实支持像
17.0.8.22
这样的数字,因为我的程序版本在注册表中是这样的数字,而且似乎LogicLib不支持Windows 7。 它确实是这样重新命名的:

${If} $0 = '17.0.22.0'
但这是失败的/被忽视的

${If} $0 > '17.0.22.0'

是NSIS附带的帮助程序宏的一部分…

是NSIS附带的帮助程序宏的一部分…

正如Anders所述,
VersionCompare
宏可以处理复杂的版本比较

下面是一个小例子:

!包括“logiclib.nsh”
!包括“wordfunc.nsh”
输出文件“version.exe”
!定义v1“1.4.0”
!定义v2“1.3”
部分
${VersionCompare}“${v1}”${v2}”$0
${select}$0
${case}0
messagebox MB_OK“${v1}=${v2}”
${case}1
messagebox MB_OK“${v1}比${v2}新”
${case}2
messagebox MB_OK“${v1}早于${v2}”
${endselect}
分段结束

正如Anders所说,
VersionCompare
宏可以处理复杂的版本比较

下面是一个小例子:

!包括“logiclib.nsh”
!包括“wordfunc.nsh”
输出文件“version.exe”
!定义v1“1.4.0”
!定义v2“1.3”
部分
${VersionCompare}“${v1}”${v2}”$0
${select}$0
${case}0
messagebox MB_OK“${v1}=${v2}”
${case}1
messagebox MB_OK“${v1}比${v2}新”
${case}2
messagebox MB_OK“${v1}早于${v2}”
${endselect}
分段结束

这很好,但我需要它来检查当前值是否高于或低于17.0.22.8,或者与17.0.22.8相同。因此,当当前值低于或不存在时,它需要做些什么。有什么问题吗?根据VersionCompare返回的值,您可以处理3个备选方案(旧的/相同的/更新的)。这都很好,但我需要它来检查当前值是否高于或低于17.0.22.8,或者与17.0.22.8相同。因此,当当前值低于或不存在时,它需要做些什么。问题是什么?根据VersionCompare返回的值,您可以处理3个备选方案(旧的/相同的/更新的)。@YoshiKlarenbeek:您能详细说明一下吗?我不明白你在说什么嵌入式安装程序。请注意,我的示例是通过定义使用硬编码版本,但您可以使用任何其他变量。我使用NSIS进行安装,安装一个名为TT的应用程序。该程序需要一个名为VDF的程序才能正常运行。所以我在$EXEDIR中包含了VDF的安装程序。这样TT的安装程序就可以读取注册表来检查是否安装了版本17.0.22.8。如果安装了此版本或更新版本,则应给出MBox,说明
注意,此计算机上已安装VDF。
并取消嵌入式安装程序的执行,如果计算机上当前安装的版本较低或找不到,则应执行嵌入式安装程序。@YoshiKlarenbeek:从这里,我看不出有任何问题。在注册表保存的版本和您将在脚本中定义的版本之间进行类似的测试;如果返回值为1(较早),则启动嵌入式设置,否则(对于0和2)将显示一个消息框。还是我错过了什么?好吧,我现在有点远了,在一个周末分心之后,我的头脑对新的挑战感到新鲜,但是它给了我一个奇怪的问题,看看这个@YoshiKlarenbeek:你能详细说明一下吗?我不明白你在说什么嵌入式安装程序。请注意,我的示例是通过定义使用硬编码版本,但您可以使用任何其他变量。我使用NSIS进行安装,安装一个名为TT的应用程序。该程序需要一个名为VDF的程序才能正常运行。所以我在$EXEDIR中包含了VDF的安装程序。这样TT的安装程序就可以读取注册表来检查是否安装了版本17.0.22.8。如果安装了此版本或更新版本,则应给出MBox,说明
注意,此计算机上已安装VDF。
并取消嵌入式安装程序的执行,如果计算机上当前安装的版本较低或找不到,则应执行嵌入式安装程序。@YoshiKlarenbeek:从这里,我看不出有任何问题。在注册表保存的版本和您将在脚本中定义的版本之间进行类似的测试;如果返回值为1(较早),则启动嵌入式设置,否则(对于0和2)将显示一个消息框。还是我错过了什么?嗯,我现在有点远了,在一个周末分心之后,我的头脑对于新的挑战是新鲜的,但是它给了我一个奇怪的问题,看看这个