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

関連する問題