Maison > développement back-end > C++ > Pourquoi mon application 32 bits ne peut-elle pas accéder à la clé de registre 64 bits HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall ?

Pourquoi mon application 32 bits ne peut-elle pas accéder à la clé de registre 64 bits HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall ?

DDD
Libérer: 2025-01-05 16:19:41
original
178 Les gens l'ont consulté

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

Impossible d'ouvrir la clé de registre dans OpenSubKey()

Lors de la tentative de récupération des noms d'affichage des sous-clés dans la clé de registre HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionUninstall, à l'aide du code :

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);
}
Copier après la connexion

Un spécifique la sous-clé, {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}, reste insaisissable. Au lieu de cela, GetSubKeyNames() renvoie {DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757, une sous-clé sans nom d'affichage.

Cause :

Sur un Système d'exploitation 64 bits, une application 32 bits accède par défaut à la clé de registre HKLMSoftwareWow6432Node. Pour récupérer la version 64 bits de la clé contenant la sous-clé souhaitée, vous devez spécifier RegistryView.Registry64.

Solution :

Dans .NET 4.0 et supérieur, vous pouvez ouvrir la clé de registre 64 bits à l'aide de la propriété 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
}
Copier après la connexion

Pour .NET 3.5, vous pouvez utiliser P/Invoke pour accéder aux clés 64 bits. Reportez-vous à la documentation sur le lien suivant pour des instructions détaillées :

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a- Application-32 bits-ou-vice-versa/

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal