Есть ли способ, которым мы можем прочитать ключ номера версии реестра универсальным способом, используя NSIS? - PullRequest
0 голосов
/ 14 мая 2019

Используя 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 или меньше), я хотел бы отобразить общее сообщение, показывающее, что необходимо удалить существующую версию вручную перед установкой более новой. версия. </p>

Есть ли какой-нибудь способ, которым мы можем прочитать ключ номера версии реестра в общем виде?

или мне нужно следовать для каждой версии, как показано ниже?

 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 голосов
/ 14 мая 2019

Используйте 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

...