20

私たちは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"));
}

これについて何か考え?


  • あなたはまさに何をしようとしていますか?また、これを「Wix」とタグ付けする必要があります。 - dvallejo
  • また、タイトルのタグ(「C#」)を繰り返さないでください。私はあなたがそれを考えていないと確信していますGetSubKeyNamesC#のメソッドですが、タイトルはそのように読んでいます。 - John Saunders

1 답변


25

問題は32/64ビットの問題です。いくつかのインストールは、

HKEY_LOCAL_MACHINE\Software\Wow6432Node\... 

両方とも列挙すると、すべてのインストールが得られます。

どうやら私も使用することができますRegistryKey.OpenBaseKey()とともにRegistryView.Registry64/32の代わりにWow6432Nodeも。

リンクされた質問


関連する質問

最近の質問