Maison > développement back-end > C++ > Comment accéder aux clés de registre 64 bits à partir d'une application .NET 32 bits ?

Comment accéder aux clés de registre 64 bits à partir d'une application .NET 32 bits ?

Mary-Kate Olsen
Libérer: 2025-01-16 19:16:10
original
790 Les gens l'ont consulté

How to Access 64-bit Registry Keys from a 32-bit .NET Application?

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal