Maison > développement back-end > C++ > Pourquoi OpenSubKey() ne parvient-il pas à récupérer la sous-clé de registre attendue sur un système 64 bits ?

Pourquoi OpenSubKey() ne parvient-il pas à récupérer la sous-clé de registre attendue sur un système 64 bits ?

DDD
Libérer: 2025-01-05 11:07:39
original
863 Les gens l'ont consulté

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

OpenSubKey() ne parvient pas à récupérer la sous-clé attendue du registre

Lors de la tentative de récupération de tous les noms d'affichage de sous-clé dans le chemin de registre suivant :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Copier après la connexion

en utilisant le code fourni, une sous-clé spécifique n'est pas accessible :

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}
Copier après la connexion

Cette sous-clé doit afficher le nom « Microsoft Visual C 2010 x64 Redistributable - 10.0.30319 ». Cependant, la méthode GetSubKeyNames() récupère une sous-clé différente :

{DA5E371C-6333-3D8A-93A4-6FD5B20BCC6E}.KB2151757
Copier après la connexion

Cause

Une application 32 bits sur un système d'exploitation 64 bits lira à partir du HKLMSoftwareWow6432Node nœud par défaut. Pour résoudre ce problème et accéder à la version 64 bits de la clé, RegistryView doit être spécifié :

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

Cette API a été introduite dans .NET 4.0. Pour .NET 3.5, P/Invoke est requis :

http://www.rhyous.com/2011/01/24/how-read-the-64-bit-registry-from-a-32 -bit-application-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!

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