OpenSubKey() でレジストリ キーを開けません
レジストリ キー HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall 内のサブキーの表示名を取得しようとすると、コード:
RegistryKey newKey; string val; string KeyPath64Bit = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; RegistryKey mainKey = Registry.LocalMachine.OpenSubKey(KeyPath64Bit); string[] RegKeys64Bits = Registry.LocalMachine.OpenSubKey(KeyPath64Bit).GetSubKeyNames(); foreach (string s in RegKeys64Bits) { newKey = mainKey.OpenSubKey(s); val = newKey.GetValue("DisplayName", -1, RegistryValueOptions.None).ToString(); if (val != "-1") file64.WriteLine(val); }
1 つの特定のサブキー、{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E} は依然としてわかりにくいです。代わりに、GetSubKeyNames() は、表示名が欠落しているサブキーである {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757 を返します。
原因:
64 ビット オペレーティング システム、 32 ビット アプリケーションは、デフォルトで HKLMSoftwareWow6432Node レジストリ キーにアクセスします。目的のサブキーを含むキーの 64 ビット バージョンを取得するには、RegistryView.Registry64 を指定する必要があります。
解決策:
.NET 4.0 以降では、 RegistryView を使用して 64 ビットのレジストリ キーを開くことができます。 property:
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 }
.NET 3.5 の場合、P/Invoke を利用して 64 ビット キーにアクセスできます。詳細な手順については、次のリンクにあるドキュメントを参照してください:
http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a- 32 ビット アプリケーションまたはその逆/
以上が32 ビット アプリケーションが 64 ビット レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall にアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。