ホームページ > バックエンド開発 > C++ > 32 ビット アプリケーションが 64 ビット レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall にアクセスできないのはなぜですか?

32 ビット アプリケーションが 64 ビット レジストリ キー HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall にアクセスできないのはなぜですか?

DDD
リリース: 2025-01-05 16:19:41
オリジナル
225 人が閲覧しました

Why Can't My 32-bit Application Access the 64-bit Registry Key HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall?

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート