如果我不知道应用程序的 GUID,如何找到它
How can I find an application if i don't know its 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 [=11=]
WriteRegStr HKLM "$R0$0" 'DisplayVersion' '${AppVersion}'
SectionEnd
所以,基本上我需要找到一种方法来读取 DisplayVersion
字符串。我希望 FindFirst
有一些变化,但对于注册表。
使用EnumRegKey
枚举注册表项:
!include LogicLib.nsh
Section
StrCpy [=10=] 0
loop:
EnumRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" [=10=]
StrCmp "" done
ReadRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall$1" "DisplayName"
${If} == "My Application Name"
ReadRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall$1" "DisplayVersion"
DetailPrint "TODO: Compare to version here..."
${EndIf}
IntOp [=10=] [=10=] + 1
Goto loop
done:
SectionEnd
为了比较版本,我必须查明我的应用程序是否已安装。 我使用注册表来存储所有必要的信息,如果我能以某种方式从注册表中读取字符串,这将非常有用。这里的主要问题是我不知道我自己的 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 [=11=]
WriteRegStr HKLM "$R0$0" 'DisplayVersion' '${AppVersion}'
SectionEnd
所以,基本上我需要找到一种方法来读取 DisplayVersion
字符串。我希望 FindFirst
有一些变化,但对于注册表。
使用EnumRegKey
枚举注册表项:
!include LogicLib.nsh
Section
StrCpy [=10=] 0
loop:
EnumRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" [=10=]
StrCmp "" done
ReadRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall$1" "DisplayName"
${If} == "My Application Name"
ReadRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall$1" "DisplayVersion"
DetailPrint "TODO: Compare to version here..."
${EndIf}
IntOp [=10=] [=10=] + 1
Goto loop
done:
SectionEnd