OpenSubKey() がレジストリから予期されたサブキーを取得できません
次のレジストリ パス内のすべてのサブキー表示名を取得しようとすると、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
提供されたコードを使用すると、特定のサブキーがアクセス可能:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
このサブキーには、「Microsoft Visual C 2010 x64 Redistributable - 10.0.30319」という名前が表示されます。ただし、GetSubKeyNames() メソッドは別のサブキーを取得します:
{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
原因
64 ビット OS 上の 32 ビット アプリケーションは HKLMSoftwareWow6432Node から読み取ります。デフォルトではノード。これに対処し、キーの 64 ビット バージョンにアクセスするには、RegistryView を指定する必要があります。
using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64)) using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall")) { // key now points to the 64-bit key }
この API は .NET 4.0 で導入されました。 .NET 3.5 の場合、P/Invoke が必要です:
http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -bit-アプリケーションまたはその逆/
以上が64 ビット システムで OpenSubKey() が予期したレジストリ サブキーの取得に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。