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

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

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

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

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

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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// アプリケーションのアンインストール情報が保存されている場所を指定する
// ※場所は固定みたいなので今回は決め打ち
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);
}
// アプリケーションのアンインストール情報が保存されている場所を指定する // ※場所は固定みたいなので今回は決め打ち 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); }
// アプリケーションのアンインストール情報が保存されている場所を指定する
// ※場所は固定みたいなので今回は決め打ち
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);
}

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

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

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