2

このレジストリエントリにインストールされているアプリケーションを取得しようとしています。

HKEY_USERS \ S-1-5-21-xxxxxx-xxxxxx-xxxxxx-1000 \ SOFTWARE \ Microsoft \ Win‌ dows \ CurrentVersion \ Uninstall

以下のコードは、registry_Keyの最初の部分(xが存在する場所)をフォルダー名に置き換えると機能します。しかし、そのフォルダ名はPCごとに異なるため、どのコンピュータでもこのコードを使用できるように、そのフォルダ名を取得するにはどうすればよいですか?

言い換えると、文字列S-1-5-21-xxxxxx-xxxxxx-xxxxxx-1000のこの部分をどのように取得しますか

     registry_key = @"> HKEY_USERS\S-1-5-21-xxxxxx-xxxxxx-xxxxxx-1000\SOFTWARE\Microsoft\Win‌​dows\CurrentVersion\Uninstall";
            using (Microsoft.Win32.RegistryKey key = Registry.LocalMachine.OpenSubKey(registry_key))
            {
                foreach (string subkey_name in key.GetSubKeyNames())
                {
                    using (RegistryKey subkey = key.OpenSubKey(subkey_name))
                    {
                        textBox2.Text += subkey.GetValue("DisplayName") + "\r\n";
                    }
                }
            }
4

1 に答える 1

2

利用可能なUSERプロファイルのリストで、HKEY_USERSレジストリハイブのレジストリをトラバースする場合は、次の内容を読み取ってフィルタリングできます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList

ただし、現在のユーザーとは異なるユーザーのレジストリハイブを開くためのアクセス許可が必要です(管理者は、実行したことはないと思います)。
CURRENT_USERレジストリを確認するだけでよい場合は、キーを直接使用する方が簡単です。

HKEY_CURRENT_USER\SOFTWARE\Microsoft\Win‌​dows\CurrentVersion\Uninstall
于 2013-02-05T10:46:20.367 に答える