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
787 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!

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