C#メモ インストールされているアプリケーションのリストを取得してみる

C#

ヤボ用で必要になったので。
ポイントはこんなとこ?

  • 起点にするレジストリの場所はここ
    SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall
  • Microsoft.Win32.Registry.LocalMachine.OpenSubKey()で起点にするレジストリの情報を取得してくる
  • さらにその子のレジストリの情報をとってこれればインストールしているアプリケーションがわかる

ただ、レジストリキーはOSで32bitか64bitかで違うとか…いろいろ前提があるみたい。
今回試した端末とビルドの条件はこんな感じ。

  • Windows 10 64bit
  • コードはAny CPUでビルド

で、コードはこんな感じ。

// アプリケーションのアンインストール情報が保存されている場所を指定する
// ※場所は固定みたいなので今回は決め打ち
string location = @"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
// レジストリの情報を取得する
// ※取得できなかった場合は諦める
Microsoft.Win32.RegistryKey parent = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(location, false);
if(parent == null)
{
	throw new Exception("Unknown Registry Key...");
}
// 子のレジストリの名前の数だけ処理をする
foreach(string sub in parent.GetSubKeyNames())
{
	// 子のレジストリの情報を取得する
	// ※取得できなかった場合は諦めて次のレジストリを処理する
	Microsoft.Win32.RegistryKey child = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(location + "\\" + sub, false);
	if (child == null)
	{
		continue;
	}
	// 表示名を保持しているオブジェクトを取得する
	// ※取得できなかった場合は諦めて次のレジストリを処理する
	object value = child.GetValue("DisplayName");
	if(value == null)
	{
		continue;
	}
	// 表示名をコンソールに表示する
	string name = value.ToString();
	Console.WriteLine(name);
}

実行したらこんな感じになった。

ちなみに、コントロールパネルの"プログラムのアンインストールまたは変更"の項目と一緒になったってのは確認できた。

んまま、明日への自分へのメモってことで。