nsis - 有什么方法可以使用 NSIS 以通用方式读取注册表版本号键?
问题描述
在安装较新版本的软件时使用 NSIS,从特定的旧版本号(例如 3.01.00)我通过卸载旧版本并安装较新版本自动将其升级到较新版本,如下所示:
注意:这里我的旧版软件安装程序使用的是 WIX,而新版的安装程序使用的是 NULLSOFT
ReadRegStr $R1 HKLM "SOFTWARE\Millinnium\3.01.00" "InstallPath"
ReadRegStr $R2 HKLM "SOFTWARE\Millinnium\3.02.00" "InstallPath"
${If} $R1 != ""
MessageBox MB_YESNO|MB_ICONQUESTION "$(UninstallPrevVer)" IDYES noUninstOld
Abort
noUninstOld:
ExecWait '"MsiExec.exe" /X{8ED262EE-FC73-47A9-BB86-D92223246881} /qb!'
${ElseIf} $R2 != ""
MessageBox MB_YESNO|MB_ICONQUESTION "$(UninstallPrevVer)" IDYES noUninstOld
Abort
noUninstOld:
ExecWait '"MsiExec.exe" /X{8ED262EE-FC73-47A9-BB86-D92223246881} /qb!'
${EndIf}
但是,如果我有很多旧版本,例如 <3.01.00(即 3.0 或 3.0.0.1 或 2.0 或更小),我想显示一条通用消息,说明在安装新版本之前手动卸载现有版本。
有什么方法可以以通用方式读取注册表版本号键?
还是我需要遵循每个版本,如下所示?
ReadRegStr $R1 HKLM "SOFTWARE\Millinnium\3.0" "InstallPath"
ReadRegStr $R2 HKLM "SOFTWARE\Millinnium\3.0.0.1" "InstallPath"
ReadRegStr $R2 HKLM "SOFTWARE\Millinnium\2.0" "InstallPath"
解决方案
用于EnumRegKey
枚举键:
Section
StrCpy $0 0
loop:
EnumRegKey $1 HKLM "SOFTWARE\Millinnium" $0
StrCmp $1 "" done
IntOp $0 $0 + 1
DetailPrint "Key: $1"
Goto loop
done:
SectionEnd
部分结束
推荐阅读
- postgresql - 在 docker-entrypoint-initdb.d 中运行脚本后,docker-compose postgres 重新启动
- javascript - useRef 挂钩中的“当前”键是什么?
- python - Python C API - PyDict - 是否需要对值和键进行引用计数?
- python - 使用 asyncpg 时如何修复异步代码锁定
- ios - 协议类型“名称”的值不能符合具有通用功能的协议“名称”
- firebase - Vuejs 路由器和 Firebase
- python - 一象限python的具体值
- java - 尝试在 Java 中运行 Selenium 时出错
- r - Ggplot2 改变条的颜色。错误 n 太大,调色板允许的最大值
- python - 如何在熊猫中清空字符串