ホームページ >バックエンド開発 >C++ >64 ビット システムで OpenSubKey() が予期したレジストリ サブキーの取得に失敗するのはなぜですか?

64 ビット システムで OpenSubKey() が予期したレジストリ サブキーの取得に失敗するのはなぜですか?

DDD
DDDオリジナル
2025-01-05 11:07:39791ブラウズ

Why Does OpenSubKey() Fail to Retrieve the Expected Registry Subkey on a 64-bit System?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。