7 votes

Accès au registre avec C# et "BUILD x86" sur une machine 64 bits

J'ai une application (écrite en C#), qui fonctionne sur un Windows Server 2008 (64bit). Dans cette application, je dois vérifier certaines clés de registre concernant l'IIS. Entre autres, je veux accéder à la clé HKEY_LOCAL_MACHINE \Software\Microsoft\InetStp\Components\WMICompatibility " pour vérifier si le mode de compatibilité IIS 6 est activé ou non. Pour cela, j'utilise Registry.GetValue de Microsoft.Win32 .

Pour certaines raisons, la solution doit être compilée avec x86 . La conséquence est qu'il n'est plus possible d'accéder à HKEY_LOCAL_MACHINE \Software\Microsoft\InetStp\Components mais il est toujours possible de lire la clé à partir de HKEY_LOCAL_MACHINE \Software\Microsoft\InetStp . En le compilant avec " AnyCPU "-flag le registre-accès fonctionne bien.

Alors, quelle est la raison de ce comportement ? Existe-t-il une solution ou une solution de contournement pour ce problème ?

12voto

David Heffernan Points 292687

Vous tombez sous le coup de redirection du registre .

La meilleure solution est d'ouvrir une vue 64 bits du registre, comme ceci :

using Microsoft.Win32;
...
RegistryKey registryKey = 
    RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).
    OpenSubKey(@"Software\Microsoft\InetStp\Components");
object value = registryKey.GetValue(@"WMICompatibility");

Si vous voulez que votre code fonctionne sur des machines 32 et 64 bits, vous devrez coder une commutation entre les vues du registre.

Nota : La possibilité d'accéder à des vues 64 bits à partir de processus 32 bits n'a été ajoutée aux bibliothèques .net que dans .net 4. Il semble qu'avant cela, vous deviez utiliser les API natives, par exemple avec P/Invoke.

3voto

Yochai Timmer Points 19802

Windows x64 a un nœud séparé pour les programmes x86 (ce n'est pas l'idée la plus brillante).

Toutes les clés de registre seront sous HKEY_LOCAL_MACHINE \Software\WOW6432Node

En savoir plus sur ce sujet :
Comment visualiser le registre du système en utilisant les versions 64 bits de Windows ?

Le programme "pense" toujours qu'il écrit sur le même chemin.

Je vous suggère de corriger votre programme d'installation (dispatch) pour écrire les paramètres initiaux au bon endroit.

Modifier Quelques "informations" de MSDN :

Clés de registre affectées par WOW64

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X