Lecture et écriture sur des clés de registre x86 et x64 à partir de la même application

Je suis en cours d'exécution de mon application compilée en tant que x86, et il est en cours d'exécution sur une version 64 bits de Windows.

Dans le but de résoudre un problème avec ClickOnce des associations de fichiers que je veux lire quelques CLSID les valeurs de la x86 vue de la base de registre et puis les écrire dans le x64 vue.

Pour être clair, cela signifie que, d'un x86 application je veux simultanément de lire à partir du x86 affichage du registre, puis d'écrire à l'x64 affichage du registre. Je veux prendre les valeurs que je trouve sous HKEY_CURRENT_USER\Software\Classes\CLSID\{my clsid} et de les écrire dans HKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{my clsid}.

Comment dois-je faire? À l'aide d'un RegistryView est de produire des résultats inattendus. Par exemple, ce OpenSubKey appel renvoie la valeur null:

keyPath = @"Software\Classes\CLSID\" + clsid;
var regularx86View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry32);
var regularClassKey = regularx86View.OpenSubKey(keyPath, RegistryKeyPermissionCheck.ReadSubTree);

Si j'utilise RegistryView.RegistryDefault ou RegistryView.Registry64 au lieu de cela, il retourne la clé - mais je m'attends à ce qu'il renvoie null lors de l'utilisation Registry64 parce que la clé n'existe pas dans la version x64 de vue et il devrait y avoir pas de redirection.

Est à l'aide d'un RegistryView la bonne chose à faire, ou dois-je utiliser la WinAPI directement?

source d'informationauteur slugster