2016-06-14 3 views
-1

に示すとおりにプログラムリストの追加と削除取得私が追加/削除プログラムのリストを取得するには、このアプローチを試してみました、それはまだ正確なリストに時におけるWindowsのC#Framework 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ビットキーの自動照会によるものです。あなたが4を.NETている場合は、あなたが記述する必要があります.NET 3.5で同じ機能を使用したい場合は、RegistryView.Registry64属性

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

を使用してx64のキーを照会するために32ビットアプリケーションを強制することができます静かなコード。解決のために、この記事を参照してください。Query Registry With .net 3.5

「これはまた、.NET 3.5で実行し、前が、それは容易ではないことができる私たちが行うDLLIMPORTを使用してのRegOpenKeyEx、RegCloseKey、およびRegQueryValueExのを使用する必要が をここにあります。いくつかの例。"

関連する問題