Je faisais l'appel suivant:
result = RegOpenKeyEx(key, s, 0, KEY_READ, &key);
(C++, Visual Studio 5, Vista 64 bits).
Il échoue avec le code d'erreur 2 ("Fichier introuvable") même si "regedit
" montre que la clé existe. Ce code a toujours fonctionné sur XP 32 bits. Pourquoi est-il "fichier introuvable" alors qu'il est clairement là?
J'ai découvert que je pouvais résoudre mon problème en utilisant l'indicateur: KEY_WOW64_64KEY
, un péché:
result = RegOpenKeyEx(key, s, 0, KEY_READ|KEY_WOW64_64KEY, &key);
Pour une explication complète: Données d'application 32 bits et 64 bits dans le Registre
Sur un système Windows 64 bits, le registre est en fait divisé en deux parties. Une section est utilisée par les processus 64 bits et une partie par les processus 32 bits.
Par exemple, si une application 32 bits écrit par programme dans ce qu'elle pense être HKLM\SOFTWARE\Company\Application, elle est en fait redirigée par la couche WoW64 vers HKLM\SOFTWARE\Wow6432Node\Company\Application.
Ainsi, lorsque vous exécutez votre application 32 bits et appelez RegOpenKeyEx, cela fonctionne en fait sur le dossier Wow6432Node\et non sur le nœud\SOFTWARE normal.
Vous devez compiler avec "Utiliser un jeu de caractères multi-octets" ou transtyper la chaîne dans le code en (LPWSTR)
oui , win7 64B, ajoutez un autre indicateur KEY_WOW64_64KEY, cela fonctionnera. si cela ne fonctionne pas, reportez-vous à http://msdn.Microsoft.com/en-us/library/ms724897 (v = VS.85) .aspx
J'avais un problème similaire. J'utilisais:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
(LPWSTR)"SOFTWARE\\0test",
0,
WRITE_DAC ,
&hKey);
Ça n'a pas marché. Je l'ai essayé comme ça et ça a fonctionné:
dwResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
_T("SOFTWARE\\0test"),
0,
WRITE_DAC ,
&hKey);