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