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
Vous devez vous connecter pour publier un commentaire.
J'ai peut-être l'incompréhension de ce que vous dîtes, mais si vous êtes en cours d'exécution dans un processus 32 bits, alors tous vos clés seront dans le
Wow6432Node\xxxxx
nœud de toute façon. Donc, si vous avez essayé de les copier à partir deHKEY_CURRENT_USER\Software\Classes\CLSID\{my clsid}
(et de ne pas spécifier le 64 bits en mode manuel) pourHKEY_CURRENT_USER\Software\Classes\Wow6432Node\CLSID\{my clsid}
vous serait de copier les mêmes valeurs. Ce code devrait fonctionner: