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
相关产品推荐
相关产品推荐

