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