2010-05-19 87 views
3

我正在創建一個程序,它首先檢查某個特定程序是否已安裝,是否安裝它繼續執行其他代碼,如果未安裝,則安裝該應用程序,然後繼續執行其他代碼。如何以編程方式獲取已安裝程序的列表

怎樣在VC編程檢查++應用程序已經被安裝或沒有

回答

2

我有一個C#函數,它類似的東西,它看起來在32位,並在registry.I 64個項假設你正在尋找所需的程序的正確名稱是將其與關鍵的「DisplayName」相匹配。我懷疑你有問題,使它的C++ ......它會去像這樣

 string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
    bool found = false; 
    RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey); 

    foreach (string skName in rk.GetSubKeyNames()) 
    { 
     RegistryKey sk = rk.OpenSubKey(skName); 

     if (sk.GetValue("DisplayName") != null && 
     sk.GetValue("DisplayName").ToString().Equals("WhateverProgramYouAreLookingFor")) 
     { 
     //whatever you need to do with it 
     found = true; 
     break; 
     } 
    } 
    if(!found) 
    { 
     SoftwareKey = @"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; 
     foreach (string skName in rk.GetSubKeyNames()) 
     { 
      RegistryKey sk = rk.OpenSubKey(skName); 
      if (sk.GetValue("DisplayName") != null && 
      sk.GetValue("DisplayName").ToString().Equals("WhateverProgramYouAreLookingFor")) 
      { 
       //whatever you need to do with it 
       found = true; 
       break; 
      } 
     } 
    } 
+0

我用這個方法也一樣,但我也跳過鍵與父母(因爲他們的服務包,系統更新等。)和Office多語言(MUI)包,因爲它們不顯示在添加/刪除程序中。 – jeffm 2010-05-24 14:06:43

+0

哦,這是一個好主意,我實際上正在想辦法跳過這些,你怎麼知道一個條目是否有孩子? – irco 2010-05-24 15:34:34

相關問題