1

WindowsレジストリのSOFTWARE\Microsoft\Windows\CurrentVersion\Uninstallキーは、インストールされているプログラムごとに1つずつ、キーのサブセットで構成されています。各プログラムのキー名は、明らかにランダムな文字列という名前が付けられているため、特定のプログラムのレジストリキーを簡単に見つけることができます(そうではありません)。DisplayNameレジストリキーの値には、プログラムの名前が含まれています。LINQを使用して辞書(Dictionary<string, RegistryKey>)を作成します。この辞書は、レジストリキーごとに、DisplayName値をレジストリキー自体にマップします。これを行う方法について何か提案はありますか?

それまでの間、 LINQを読んで、解決策を見つけられるかどうかを確認します。LINQの使用を実際に検討したのはこれが初めてです。これは適度に一般的なタスクであり、他の人が恩恵を受ける可能性があると思ったので、ここに質問を投稿します。

ヒント:Microsoft.Win32.Registryは、Windowsレジストリにアクセスするために使用するクラスです。

4

2 に答える 2

2

LINQ の例への素敵なリンク (しゃれは意図されていません)

http://www.deepakkapoor.net/get-a-list-of-installed-applications-using-linq-and-c/

あなたの状況では、次のように変更します。

string registryKey =
    @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";

using (Microsoft.Win32.RegistryKey key = 
    Registry.LocalMachine.OpenSubKey(registryKey))
{
    (from a in key.GetSubKeyNames()
    let r = key.OpenSubKey(a)
    select new
    {
        DisplayName = r.GetValue("DisplayName"),
        RegistryKey = r
    })
  .Where(c => c.DisplayName!= null)
  .ToDictionary(k=>k.DisplayName, v=>v.RegistryKey);
}
于 2012-11-02T17:41:33.300 に答える
0

これらの行に何かを書くことができます:

string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
var dict = new Dictionary<string, RegistryKey>();

using(var key = Registry.LocalMachine.OpenSubKey(registryKey))
{
    foreach(string subkeyName in key.GetSubKeyNames())
    {
        using(var subkey = key.OpenSubKey(subkeyName))
        {
            dict.Add(subkey.GetValue("DisplayName"), subkey);
        }
    }
}

または、LINQ を使用する場合:

string registryKey = 
    @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
var dict = new Dictionary<string, RegistryKey>();

  using (var key = Registry.LocalMachine.OpenSubKey(registryKey))
  {
    var query = from a in
    key.GetSubKeyNames()
    let r = key.OpenSubKey(a)
    select new
      {
        displayName = r.GetValue("DisplayName")
        subKey = r
      };

    foreach (var item in query)
    {
       dict.Add(item.displayName, item.subKey);
    }
  }
于 2012-11-02T17:20:27.193 に答える