有什么方法可以使用NSIS以通用方式读取注册表版本号键?

时间:2019-05-14 13:59:35

标签: nsis

在从较早的特定版本(例如3.01.00)安装较新版本的软件时使用NSIS,我将通过卸载较旧版本并按如下所示安装较新版本的方式自动将其升级到较新版本:

注意:这里我的较旧版本的软件安装程序正在使用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"

1 个答案:

答案 0 :(得分:0)

使用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

SectionEnd