You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NSIS如何检查服务器上.NET 6 Windows Desktop App的6.x版本

优化NSIS脚本实现.NET 6.x版本模糊检查

要实现仅检查是否存在以6.开头的.NET Windows Desktop App版本,无需精确匹配完整版本号,你可以利用NSIS的字符串处理函数修改原有脚本,以下是具体实现:

修改后的完整脚本

StrCpy $0 0
loopx86:
ClearErrors
EnumRegValue $1 HKLM SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\x86\sharedfx\Microsoft.WindowsDesktop.App $0
IfErrors errorx86
IntOp $0 $0 + 1
; 读取版本值(原脚本中$2未使用,可保留或移除)
ReadRegStr $2 HKLM SOFTWARE\WOW6432Node\dotnet\Setup\InstalledVersions\x86\sharedfx\Microsoft.WindowsDesktop.App $1
; 判断版本号是否以"6."开头
StrCmp $1 "" loopx86 ; 跳过空值
LeftStr $3 $1 2 ; 取版本字符串前2个字符
StrCmp $3 "6." donex86 loopx86 ; 匹配成功则跳出循环
errorx86:  
 MessageBox MB_OK "未找到x86架构的.NET 6.x Windows Desktop App!"  
 Abort
donex86:
 MessageBox MB_OK "已找到符合要求的x86架构.NET 6.x版本!"      

关键改动说明

  • 替换原有的精确版本匹配StrCmp $1 "6.0.9" donex86 loopx86,改用LeftStr截取版本号的前2个字符,再与6.比较,实现模糊匹配。
  • 添加空值判断StrCmp $1 "" loopx86,避免读取到空的注册表值时出现异常。

备选实现方式(利用StrStr)

如果你偏好使用字符串查找逻辑,也可以用StrStr函数判断版本号是否以6.开头:

; 替换原匹配逻辑部分
StrCmp $1 "" loopx86
StrStr $3 $1 "6."
StrCmp $3 $1 donex86 loopx86 ; 若"6."在字符串起始位置,则$3等于$1

额外注意事项

  • 如果需要同时检查x64架构的版本,只需将注册表路径中的x86替换为x64,复制一套相同的检查逻辑即可。
  • 确保你的NSIS版本支持LeftStr和StrStr函数(NSIS 2.46及以上版本均支持)。

内容的提问来源于stack exchange,提问作者Kixoka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:55:17