1

我知道应用程序名称并尝试使用 install shield 查找应用程序的安装位置和 GUID。

我在以下位置手动找到了应用程序注册表值(如 DisplayName、InstallLocation、UninstallString 等):HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall{GUID}

但是应用程序的 GUID 在每台客户端机器上都不同,因此我无法使用以下函数对注册表路径进行硬编码以获取这些值。RegDBGetKeyValueEx();

如果我们知道应用程序名称,我们能否找到应用程序的 GUID?

谢谢。

4

1 回答 1

1

您可以使用类似于RegDBQueryKey 示例的代码列出卸载密钥:

#define UNINSTALLKEYPATH "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
listKeys = ListCreate(STRINGLIST);
RegDBQueryKey(UNINSTALLKEYPATH, REGDB_KEYS, listKeys);

然后您可以使用类似于ListGetNextItem 示例的代码迭代这些键以查找适当的值:

nResult = ListGetFirstItem(listKeys, sItem);
while (nResult != END_OF_LIST)
    RegDBGetKeyValueEx(UNINSTALLKEYPATH ^ sItem, ...); // check each key
    nResult = ListGetNextItem(listKeys, sItem);
endwhile;

找到它后,您可以利用该密钥中的任何其他信息或密钥本身的名称。(注意:不要忘记销毁列表。)

如果您了解有关此设置的其他信息,例如,如果它是 MSI,则可能有更直接的方法可以利用 Windows Installer API。

于 2016-02-01T12:40:07.107 回答