如何使用 install shield 查找其 GUID 随每次安装而变化的第 3 方应用程序的安装位置和 GUID?

How to find the install location and GUID of 3rd party application whose GUID changes for every installation using install shield?

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

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

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

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

谢谢。

您可以使用类似于 RegDBQueryKey example:

的代码列出卸载键
#define UNINSTALLKEYPATH "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
listKeys = ListCreate(STRINGLIST);
RegDBQueryKey(UNINSTALLKEYPATH, REGDB_KEYS, listKeys);

然后您可以使用类似于 ListGetNextItem example:

的代码迭代这些键以查找合适的值
nResult = ListGetFirstItem(listKeys, sItem);
while (nResult != END_OF_LIST)
    RegDBGetKeyValueEx(UNINSTALLKEYPATH ^ sItem, ...); // check each key
    nResult = ListGetNextItem(listKeys, sItem);
endwhile;

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

如果您了解有关此设置的更多信息,例如,如果它是 MSI,则可能有更直接的方法利用 Windows 安装程序 API。