2016-06-14 42 views
-1

我已經嘗試過這種方法來獲取附加的列表/刪除程序和它仍然沒有給出確切的名單獲取添加刪除程序列表嚴格按照顯示在Windows的C#框架3.5(不4.0)

在查找範圍在3個地方

註冊表
installedSoftware.AddRange(GetInstalledSoftware(@"SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall")); 
installedSoftware.AddRange(GetInstalledSoftware(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")); 
installedSoftware.AddRange(GetInstalledSoftware(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")); 

代碼:

private List<string> GetInstalledSoftware(string regKey) 
{ 
    var installedSoftware = new List<string>(); 

    using (RegistryKey key = Registry.LocalMachine.OpenSubKey(regKey)) 
    { 
     if (key != null) 
     { 
      foreach (string subkey_name in key.GetSubKeyNames()) 
      { 
       using (RegistryKey subkey = key.OpenSubKey(subkey_name)) 
       { 
        object displayName = subkey.GetValue(ToolResources.DisplayName); 

        if (displayName != null) 
        { 
         installedSoftware.Add(displayName.ToString()); 
        } 
       } 
      } 
     } 
    } 

    return installedSoftware; 
} 

這是一個4.0解決方案,但將不會在3.5

工作

C#: How to get installing programs exactly like in control panel programs and features?

我錯過了什麼?

回答

0

這是由於32/64位密鑰的自動查詢。如果您有.NET 4,你可以通過使用RegistryView.Registry64屬性

var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) 
using (var key = hklm.OpenSubKey(key)) 
{....} 

力的32個應用程序查詢64鍵,如果你想使用.NET 3.5中相同的功能,你將不得不寫安靜一些代碼。請參閱本文的解決方案:Query Registry With .net 3.5

「這也可以在.NET 3.5完成,之前卻是不容易的 我們要做使用的DllImport和使用RegOpenKeyEx,RegCloseKey和的RegQueryValueEx這裏有。一些例子。」

相關問題