2017-02-08 13 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 

MainSection :

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