如果我不知道应用程序的 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