Accès aux entrées de registre 64 bits à partir d'une application .NET 32 bits
Accéder au registre 64 bits à partir d'une application 32 bits exécutée sur un système Windows 64 bits nécessite une approche spécifique. Heureusement, le .NET Framework 4.x et les versions ultérieures offrent une prise en charge intégrée pour cela.
Exploiter RegistryView pour un accès au registre 64 bits
L'énumération RegistryView
est essentielle pour différencier l'accès au registre 32 bits et 64 bits. Voici comment l'utiliser :
<code class="language-csharp">// Access the 64-bit registry using Microsoft.Win32; RegistryKey localKey64 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64); RegistryKey sqlServerKey64 = localKey64.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"); // Access the 32-bit registry RegistryKey localKey32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32); RegistryKey sqlServerKey32 = localKey32.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL");</code>
Récupération de valeurs de registre spécifiques
Pour récupérer une valeur spécifique, telle que "SQLEXPRESS" sous la clé "Instance NamesSQL", utilisez :
<code class="language-csharp">string sqlExpressKeyName = (string)sqlServerKey64.GetValue("SQLEXPRESS");</code>
Récupération complète des clés : combinaison des résultats 32 bits et 64 bits
Pour les situations nécessitant des données provenant d'emplacements de registre 32 bits et 64 bits, une requête combinée est avantageuse :
<code class="language-csharp">using System.Linq; IEnumerable<string> GetAllRegValueNames(string regPath) { var reg64 = GetRegValueNames(RegistryView.Registry64, regPath); var reg32 = GetRegValueNames(RegistryView.Registry32, regPath); var result = (reg64 != null && reg32 != null) ? reg64.Union(reg32) : (reg64 ?? reg32); return (result ?? new List<string>().AsEnumerable()).OrderBy(x => x); }</code>
Où GetRegValueNames
est une fonction d'assistance (non illustrée, mais facilement implémentée) qui récupère les noms de valeurs sous une clé donnée. regPath
spécifie le chemin du registre.
Exemple d'utilisation :
<code class="language-csharp"> var sqlRegPath = @"SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"; foreach (var keyName in GetAllRegValueNames(sqlRegPath)) { Console.WriteLine(keyName); } ``` This iterates through all found keys, regardless of whether they reside in the 32-bit or 64-bit registry hive.</code>
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!