Maison >développement back-end >C++ >Comment une application 32 bits peut-elle accéder au registre Windows 64 bits ?

Comment une application 32 bits peut-elle accéder au registre Windows 64 bits ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-16 19:12:13663parcourir

How Can a 32-bit Application Access the 64-bit Windows Registry?

Lire le registre 64 bits à partir d'une application 32 bits

Lorsqu'une application 32 bits s'exécute sur un système Windows 64 bits, elle ne peut accéder à la clé de registre que sous HKEY_LOCAL_MACHINESoftwareWow6432Node. Cependant, dans certains cas, l'accès au registre 64 bits est requis.

Solution :

Utilisation de .NET Framework 4.x et supérieur :

.NET Framework 4.x et versions ultérieures fournissent l'énumération RegistryView, permettant un accès direct aux clés de registre 64 bits et 32 ​​bits. Voici comment procéder :

Accéder au registre 64 bits :

<code class="language-csharp">using Microsoft.Win32;

RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
// 对64位注册表执行操作</code>

Accéder au registre 32 bits :

<code class="language-csharp">RegistryKey localKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
// 对32位注册表执行操作</code>

Alternative :

Pour les situations où vous devez accéder à des clés de registre 64 bits et 32 ​​bits, vous pouvez utiliser la méthode suivante :

<code class="language-csharp">// 获取64位和32位节点的所有注册表值
var mergedValues = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).GetValues()
    .Concat(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).GetValues());

// 获取64位和32位节点的所有注册表项
var mergedKeys = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).GetSubKeyNames()
    .Concat(RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).GetSubKeyNames());</code>

Remarque :

  • La lecture du registre 64 bits est possible grâce au sous-système WOW64 de Windows (qui émule les opérations 32 bits sur les systèmes 64 bits).
  • Dans Windows 7, il existe un bug où la version du code 32 bits renvoie toujours « Microsoft » pour RegisteredOrganization, quelle que soit la valeur réelle.
  • Dans les versions 32 bits de Windows, le sous-arbre WOW6432Node n'existe pas.

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!

Déclaration:
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