2016-04-08 3 views
0

У меня есть GUID продукта. И я хочу знать, установлен ли он на компьютере Windows или нет, и если он установлен, то каково местоположение. До сих пор я пытался этоКак определить, установлен ли продукт или нет, используя их GUID в скрипте Install-shield.

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

Если этот продукт установлен на «Все пользователи», он появится под HKEY_LOCAL_MACHINE. Если он был установлен только для текущего пользователя, он появится под 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;