2017-02-08 18 views
0

Чтобы сравнить версии, мне нужно выяснить, установлено ли мое приложение. Я использую реестр для хранения всей необходимой информации, и было бы очень полезно, если бы я мог как-то читать строки из реестра. Основная проблема здесь в том, что я не знаю своего собственного GUID, который был рандомизирован во время предыдущей установки.Как я могу найти приложение, если я не знаю его GUID

Чтобы создать свой путь реестра, который я написал следующий скрипт:

Function .onInit 
    ${If} ${RunningX64} 
     StrCpy $R0 "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 
    ${Else} 
     StrCpy $R0 "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" 
    ${EndIf} 
FunctionEnd 

основной секции:

Section "Main" sec 
System::Call 'ole32::CoCreateGuid(g .s)' 
Pop $0 
WriteRegStr HKLM "$R0\$0" 'DisplayVersion' '${AppVersion}' 
SectionEnd 

Таким образом, в основном мне нужно найти способ, чтобы прочитать DisplayVersion строку. Хотелось бы, чтобы был какой-то вариант FindFirst, но для реестра.

ответ

0

EnumRegKey Использование перечислить ключи реестра:

!include LogicLib.nsh 

Section 

StrCpy $0 0 
loop: 
    EnumRegKey $1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $0 
    StrCmp $1 "" done 
    ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$1" "DisplayName" 
    ${If} $2 == "My Application Name" 
     ReadRegStr $2 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$1" "DisplayVersion" 
     DetailPrint "TODO: Compare $2 to version here..." 
    ${EndIf} 
    IntOp $0 $0 + 1 
    Goto loop 
done: 

SectionEnd 
+0

Вау, спасибо! – CeeZee