如何通过在Install-shield脚本中使用GUID来查找产品是否已安装

时间:2016-04-08 06:40:54

标签: installshield

我有产品GUID。我想知道它是否安装在Windows机器上,如果安装,那么它的位置是什么。直到现在我已经尝试了这个

szKey= "\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{2D444666-5875-4B28-9ED8-15F750802BF5}";

 if (RegDBKeyExist (szKey) < 0) then

            MessageBox ("First call to RegDBKeyExist failed.", SEVERE);

        else

            SprintfBox (INFORMATION, TITLE_TEXT, "%s exists.", szKey);

        endif;

注意:

我有

下的GUID
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall
{2D444666-5875-4B28-9ED8-15F750802BF5}

我是否为szKey提供了错误的价值?

1 个答案:

答案 0 :(得分:1)

如果该产品已安装到&#39;所有用户&#39;,它将显示在HKEY_LOCAL_MACHINE下。如果它仅安装到&#39;当前用户&#39;,它将显示在HKEY_CURRENT_USER下。
因此,在InstallShield中,您需要重复此测试两次,类似这样。另外,请注意我从密钥名称中删除了前导反斜杠。

RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szKey= "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{2D444666-5875-4B28-9ED8-15F750802BF5}";
if (RegDBKeyExist (szKey) < 0) then
    RegDBSetDefaultRoot(HKEY_CURRENT_USER);
    if (RegDBKeyExist (szKey) < 0) then
        MessageBox ("call to RegDBKeyExist failed.", SEVERE);
    else
        SprintfBox (INFORMATION, TITLE_TEXT, "%s exists for current user.", szKey);
    endif;
else
    SprintfBox (INFORMATION, TITLE_TEXT, "%s exists for all users.", szKey);
endif;