私たちはWIXを使って、私たちが作成した数多くのサービスをインストールしています。現在インストールされているサービスをダンプするための簡単なユーティリティを書いています。以下のサブキーを繰り返します。
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
探しているDisplayName
。問題は、私の10個のサービスのうち2個だけがリストに表示されることです。
しかし、Regeditのサブキーを見ると、そこにあります。同様に、それらはインストールされたプログラムにあります(そして私はWin32_ProductからのSELECT *にもそれらを見つけることができます)。
私は見逃しているレジストリのいくつかの特別なビューがあるかどうかを調べることを試みて、MSDNのドキュメントを調べました。たぶんそれは特権の問題ですか?しかし、私は管理者としてツールを実行しています。ハイブの取り付けに関する問題はありますか?
コードを明確にするために、テストアプリのコードを次に示します(この答え):
String registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";
using(Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registryKey))
{
foreach(String subkeyName in key.GetSubKeyNames())
Console.WriteLine(key.OpenSubKey(subkeyName).GetValue("DisplayName"));
}
これについて何か考え?
問題は32/64ビットの問題です。いくつかのインストールは、
HKEY_LOCAL_MACHINE\Software\Wow6432Node\...
両方とも列挙すると、すべてのインストールが得られます。
どうやら私も使用することができますRegistryKey.OpenBaseKey()
とともにRegistryView.Registry64/32
の代わりにWow6432Node
も。
GetSubKeyNames
C#のメソッドですが、タイトルはそのように読んでいます。 - John Saunders