Regedit

Résolu
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009 - 24 nov. 2004 à 23:14
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009 - 29 nov. 2004 à 21:29
Voila j'ai un probleme j'essaye de parcourir le regedit notemment a l'aide d'une fonction recursive a base de RegOpenKeyEx ();
Seulement j'ai un probleme, le programme s'enfonce un petit peu dans l'arborescence puis ne peut plus ouvrir de dossier (=subkeys).

Erreur : " Impossible de creer un fichier deja existant"

Ce qui est byzarre c'est que si j'ouvre ma base de registre et qu'a l'aide de la souris je la parcours et que je lance mon bout de code, alors il arrive a parcourir tout les endroits ou je me suis ballade.

Voala....MAis comment Est ce donc que C'est PossiBLe o_0 !

Merci d'avance ;)

9 réponses

the_last_pharaon Messages postés 6 Date d'inscription mardi 22 juin 2004 Statut Membre Dernière intervention 29 novembre 2004
29 nov. 2004 à 16:19
j'ai le même problème que toi concernant la fonction de l'api RegOpenkeyEx!!!
Il n'y a donc pas de problème dans ton code, mais plutôt dans l'utilisation de cette fonction de "merde" RegOpenkeyEx, qui ne marche soudainement plus ?
Moi, je répertorie dans un arbre toutes les "keys", et en créant cet arbre, la fonction RegOpenkeyEx() plante, mais elle plante vraiment quand elle veut, elle marche correctement pour la plupart des clés mais pour certaines, elle plante sans aucune raison.
la solution que j'ai trouvée, c'est d'utiliser RegCreateKeyEx(), qui a deux modes de fonctionnement, soit elle crée la clé si elle n'existe pas, soit elle ouvre sans la changer (toi, c'est ce qu tu veux)...
j'suis déçu des admins... :(
3
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 nov. 2004 à 23:26
Faut pas faire de recursivite, il y a des fonctions d'enum dispos a cet effet.

ciao...
BruNews, MVP VC++
0
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009
25 nov. 2004 à 14:09
Bah en fait j'utilise bien RegEnumKeyEx () et RegEnumValue (), mais si je veux parcourir toute l'arborescence je peux apsser apr une fonction recursive non?
Et pourquoi il faut aps utiliser la recursivite a cause de la pile qui explose?
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
25 nov. 2004 à 14:26
La gestion de la pile est toujours un risque quand on utilise la recursivite mais ce n'est pas la que l'erreur se produit dans ton cas, il semble bloquer avant.
Verifie que tu n'ouvres pas un handle de sous cle sur sur une cle parente deja ouverte.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
25 nov. 2004 à 18:06
Si ton code détruit systématiquement tous les objets et les handles que tu ouvres, la récursivité ne pose aucun problème.

Maintenant comme BruNews te le fait remarquer, l'erreur provient surement de ton code.

Shell
0
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009
26 nov. 2004 à 00:22
Mouai ce que je comprend pas c'est pourquoi lorsque que je parcours l'arborescence dans le regedit et que je lance mon programme il n'y a aucun probleme lors de l'ouverture.
Et que signifie cette erreur "Impossible de creer un fichier deja existant", j'essaye aps de crees un fichier puisque je fais RegOpenKeyEx().
0
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009
26 nov. 2004 à 00:47
A oui autre chose si par exemple l'ouverture de l'adresse A et echoue et que dans le programme je le prevoie et que je mette RegOpenKeyEx (A) alors la l'ouverture fonctionne.

Genre:

Fonction Recursive ()
{
if (RegOpenKeyEx (adresse)!=ERROR_SUCCCES) //adresse est la variable contenant l'adresse suivante
RegOpenKeyEx (A);
....
}
La ca marche, evidemment ca plante quelques dossiers plus loin.
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
29 nov. 2004 à 16:51
the_last_pharaon > "j'suis déçu des admins" alors la vraiment c'est quoi le prob avec les admins ??? je ne vois pas.

ciao...
BruNews, MVP VC++
0
elinep Messages postés 56 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 3 décembre 2009
29 nov. 2004 à 21:29
Ouai te vexe pas Brunews, je connais en personne the_last_pharaon , il aime bien titiller mais il a rien contre toi, en tout cas la soluce semble bien etre RegCreateKeyEx ()...
Byzare Byzare tout ca!
0