IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

regsavekey error 183


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut regsavekey error 183
    bonjour,

    je suis dans la conception d'un logiciel qui enregistre les modifications de la base de registre, puis écrit le rapport dans un fichier.

    J'ai procédé de façon à que:
    j'enregistre les clés (sous clés compris) dans un fichier.
    j'en refais un, puis je compare, tout ça dans un boucle.

    sauf que j'ai un problème pour enregistrer toute la base de registre ;
    j'enregistre comme celà:
    HKLM_SOFTWARE (donc ça prend tout + sous clés)
    HKLM_SYSTEM
    ....
    HKCU_CLSID
    ...

    d'après msdn, on peut pas avec Classe root :s.
    Donc j'en ai à peu près 40 à rassembler.

    bon après avoir sauvegarder chacun des sous clés d'une clés dans un fichier différent, je les rassemble en un seul, puis je refais un fichier et je compare.

    sauf que la en comparant j'ai eu l'erreur avec regsavekey, l'error 183, voici mon code:

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #include <stdlib.h>
    #include <stdio.h>
    #include <windows.h>
    #include <string.h>
    #include <winreg.h>
     
    int saveKey(HKEY tree, const char *folder){
    	long lRval;
    	HKEY hKey;
     
    		// Open location
    	lRval = RegOpenKeyEx( tree, folder, 0, KEY_READ, &hKey );
    	if (lRval != ERROR_SUCCESS)
    	{
    		printf("open failed: %ld",lRval);
    		return 0;
    	}
     
    	lRval = RegSaveKey(hKey,"envBack",NULL);
    	if (lRval != ERROR_SUCCESS)
    	{
    		printf("save failed: %ld", lRval);
    		return 0;
    	}
    	else
    		return 1;
     
    }
     
    int main()
    {
    	//BACKUP REGISTRY KEY: HKEY_LOCAL_MACHINE -> SOFTWARE
    	if (saveKey(HKEY_LOCAL_MACHINE,"SOFTWARE"))
    		printf("BACKUP OF REGISTRY KEY: HKEY_LOCAL_MACHINE -> SOFTWARE successful");
    	else
    		printf("BACKUP OF REGISTRY KEY: HKEY_LOCAL_MACHINE -> SOFTWARE failed");
     
     	return 0;
    }

    donc voilà si vous pouvez m'aidez, je bloque sur ce point.
    J'ai chercher sur le net, j'ai trouver que l'erreur 183 de regsavekey veut dire "error already exist".


    si vos voyez l'erreur merci.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Citation Envoyé par [url=http://msdn2.microsoft.com/en-us/library/ms681382.aspx]MSDN[/url]
    ERROR_ALREADY_EXISTS
    Cannot create a file when that file already exists.
    Bref, ça indique que ton fichier existe déjà.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Mais il te manque un tas de trucs. Pour faire une sauvegarde du registre il faut avoir le privilège SeBackupPrivilege et puis utiliser REG_OPTION_BACKUP_RESTORE dans l'argument dwOption lors de l'ouverture de la clé. Lis un peu cet article. Je me demande comment le programme essaie quand même d'effectuer une sauvegarde et de dire que le fichier existe déjà ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    melem merci pour ton lien, là je l'ai compiler puis lancer, j'obtiens 5 fichiers comme les 5 sous clés de HKLM, puis lorsque j'ouvre les fichiers, j'obtiens du "n'importe quoi", c'est du tout pas comme la base de registre...

    voilà un extrait d'un fichier:
    hbin  ÿÿÿnk, ü£PõUJÈ ÿÿÿÿ ª9 ÿÿÿÿ ÿÿÿÿ€ ÿÿÿÿ* $$$PROTO.HIV øþÿÿsk €   ì  ”Ð à   ¼       !
     €  !  ?    
         ?   
        ?    
            ÿÿÿnk Â
    ˆäZ¶Ç  € ÿÿÿÿ ÿÿÿÿè ÿÿÿÿ èV

    ControlSet
    º–Ðþÿÿsk Ø 𨠫   €Ü ø   È       !  €  !  ?          ?       $ ?    ËØÏ·6ƒä¯ï^ë      ËØÏ·6ƒä¯ï^ë   ËØÏ·6ƒä¯ï^ ðÿÿÿA m d K 8 ¨ÿÿÿnk Â
    ˆäZ¶Ç ˆ   ÿÿÿÿ ÿÿÿÿè ÿÿÿÿ  Servicesðÿÿÿlf ( Serv¨ÿÿÿnk Â
    ˆäZ¶Ç ( ÿÿÿÿÿÿÿÿ  è ÿÿÿÿ
      Fax p l àÿÿÿvk  €   Startt Løÿÿÿè ðÿÿÿlf  Fax ÿÿÿnk ~}‹aºLÈ  Pz ÿÿÿÿ ÿÿÿÿ€ ÿÿÿÿ$ 
    ControlSet001 ÿÿÿsk `î € ÿ Ô  „¸ È   ¤       !  €  !  ?          ?               èÿÿÿU S E R N A M E ¨ÿÿÿnk ÷ãUJÈ  9 øÑ
    ÿÿÿÿ ¨ € ÿÿÿÿ. 0 †  Control Øÿÿÿvk     CurrentUser èÿÿÿU S E R N A M E Ðÿÿÿvk P   WaitToKillServiceTimeoutðÿÿÿ2 0 0 0 0 ðÿÿÿ€ ‹æ}/Ðÿÿÿvk 8    SystemStartOptions pÿÿÿN O E X E C U T E = O P T I N F A S T D E T E C T S A F E B O O T : M I N I M A L S O S B O O T L O G N O G U I B O O T Øÿÿÿvk H X   SystemBootDevice°ÿÿÿm u l t i ( 0 ) d i s k ( 0 ) r d i s k ( 0 ) p a r t i t i o n ( 2 ) èÿÿÿà  p 0 ¨ÿÿÿnk À:‡iwÑÄ ˆ ÿÿÿÿÿÿÿÿ H € ÿÿÿÿ 
    donc voilà si vous voyez ce que je veut dire.

    Comment avoir du vraie reg, base de registre ?

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Apparement, si, c'est justement "la vraie base de registre".
    Si tu veux le format texte, volumineux et inefficace, il te faudra sûrement y aller manuellement.
    ..Ou peut-être invoquer regedit en ligne de commande...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 95
    Par défaut
    Citation Envoyé par Médinoc
    Apparemment, si, c'est justement "la vraie base de registre".
    Donc la sauvegarde de la base de registre par l'exécutable et l'user ne se corresponde pas.

    Citation Envoyé par Médinoc
    Si tu veux le format texte, volumineux et inefficace, il te faudra surement y aller manuellement.
    Manuellement

    Citation Envoyé par Médinoc
    ..Ou peut-être invoquer regedit en ligne de commande...
    En batch, pourquoi pas, tant que j'aurais la même sauvegarde faites par l'user.
    Donc comment on fais.

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Donc la sauvegarde de la base de registre par l'exécutable et l'user ne se corresponde pas.
    Si, tu peux manuellement enregistrer une clé au format "ruche" avec regedit, comme le fait RegSaveKey(). C'est en choisissant le type de fichier "ruche" dans la boîte de dialogue de sauvegarde.

    Mais je ne pense pas que Windows offre des fonctions pour sauvegarder le registre au format texte Regedit: Ce doit être programmé dans Regedit même...

    Edit: Par contre, sous un Windows moderne, il y a l'utilitaire en ligne de commande REG.EXE, qui semble capable d'exporter une clé de registre au format texte.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. ERROR: pg_atoi: zero-length string
    Par steelspirit92 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 23/08/2003, 22h29
  2. [SQL Server] Error converting data type varchar...
    Par Sir Tengu dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/06/2003, 10h46
  3. [Kylix] Kylix c++ error
    Par pacpac dans le forum EDI
    Réponses: 2
    Dernier message: 10/06/2003, 16h27
  4. [CR] Print Engine error text
    Par afaraji dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2002, 15h44
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo