Pourquoi est-OpenSubKey() pour retourner la valeur null sur mon Windows 7 64-bit du système?
Ne OpenSubKey() et autres Microsoft.Registre Win32 retour des fonctions nulles sur les systèmes 64 bits lorsque les clés de registre 32 bits sont sous Wow6432node dans le registre?
Je travaille sur un framework de test unitaire qui fait un appel à OpenSubKey() de l' .NET-library.
Mon système de développement est un Windows 7 64-bit, de l'environnement avec Visual Studio; 2008 SP1 et Windows 7 SDK installé.
La demande, nous sommes le test unitaire est une application 32 bits, de sorte que le registre est virtualisé sous HKLM\Software\Wow6432node
. Lorsque nous appelons:
Registry.LocalMachine.OpenSubKey( @"Software\MyCompany\MyApp\" );
Null est retourné, cependant indiquant explicitement à regarder ici:
Registry.LocalMachine.OpenSubKey( @"Software\Wow6432node\MyCompany\MyApp\" );
Ce que je comprends de cette fonction doit être agnostique à 32-bits ou 64-bits environnements et doit savoir pour sauter vers le nœud virtuel.
Encore plus étrange est le fait que l'exacte même appel à l'intérieur d'un compilé et installé la version de notre application fonctionne très bien sur le même système et obtenir les clés de registre nécessaires à l'exécution; qui sont également placés dans HKLM\Software\Wow6432node
.
Que dois-je faire?
- J'ai trouvé la réponse ici http://stackoverflow.com/questions/1074411/how-to-open-a-wow64-registry-key-from-a-64-bit-net-application
- Suivi: il s'est avéré que nous n'avons pas besoin de créer une nouvelle plate-forme cible, après tout. Nous exécuter les tests par le biais de nunit, qui distribue un x86 exécutable spécifique. À l'aide de la x86 exécutable spécifique a permis les tests pour accéder au Registre, sans modification du cadre.
Vous devez vous connecter pour publier un commentaire.
Il semble que votre tests unitaires projet est compilé en 64 bits. Dans le
Compile
paramètres de vos tests unitaires projet, définir le "PROCESSEUR Cible" àx86
(au lieu deAnyCPU
).Si vous avez vraiment besoin d'un 32 bits, vous pouvez accéder à la version 64 bits du registre comme ceci:
Oui, j'ai également le même problème avec Windows 7 64 bits et Visuelle Studio; 2008 SP1. Mais ma solution est le contraire, ce qui est de changer de "x86", soit de "any CPU" ou "x64".
À qui la concernent
Dans mon test, si vous utilisez AnyCpu pour générer le code pour faire le OpenSubKey, et l'exécuter sur un système d'exploitation x64, Vous trouverez que vous ne travaillez pas sur l'endroit où vous vous attendez.
lorsque vous vérifiez la rsk.GetSubKeyNames()
Et la plus célèbre de question cela pourrait conduire à l'est:
DeleteSubKeyTree va jeter Exception d'Argument.
si vous essayez d'ouvrir la sous-clé avant de le supprimer, c'est ok, mais quand on fait de la suppression, il va dire, hey, c'est pas ici...
Attention donc, maintenant, je vais ne jamais ne jamais utiliser AnyCPU plus.