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 :

Lire la base de registre


Sujet :

Windows

  1. #1
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut Lire la base de registre
    Bonjour
    Je cherche à lire la base de registre afin d’en extraire le répertoire d’installation de Firebird
    (Code rédigé en Delphi)
    Code Delphi : 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
    begin
    var
    reg : TRegistry;
    reginfo:TRegKeyInfo;
    begin
    reg := TRegistry.create;
    reg.RootKey := HKEY_LOCAL_MACHINE;
    if (reg.OpenKeyReadOnly(‘SOFTWARE\Firebird Project\Firebird Server\Instances’))
      then
      begin
      reg.GetKeyInfo(reginfo);
      Edit5.text:=inttostr(reginfo.NumSubKeys);
      end
      else
      Edit5.text:='Echec';
     
    Reg.closeKey;
    reg.Free;
    end;

    Le code ci-dessus renvoie «’Echec’»

    si en revanche je mets une autre entrée de la même clé (HKEY_LOCAL_MACHINE\SOFTWARE) par exemple «ATI Technologies», j’obtiens : 1 (le nombre de sous clés)

    Et si je poursuis ce test sur toutes les clés de HKEY_LOCAL_MACHINE\SOFTWARE je constate que certaines sont lues, d’autres, non. 'Logitech' n'est pas accessible mais 'Google' l'est.

    Cela ne tient pas aux autorisations des clés. Elles sont toutes lisibles par les Utilisateurs.

    Si quelqu'un a l'explication de ce curieux comportement ?

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    App et Firebird 32 ou 64 bits ?

    Si ton app est 32 bits, ton code va énumérer les clés 32 bits (HKLM\SOFTWARE\WOW6432Node). A l'inverse si elle est 64 bits, ce sera les clés 64 bits (HKLM\SOFTWARE). Il faut mettre en place une redirection pour mélanger 32 et 64.

    Exemple pour une app 32 bits voulant accéder au clés 64 bits :
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    reg := TRegistry.create(KEY_READ or KEY_WOW64_64KEY);
    reg.RootKey := HKEY_LOCAL_MACHINE;
     
    if reg.OpenKey('SOFTWARE\Firebird Project\Firebird Server\Instances', FALSE) then

    A noter qu'il ne faut pas utiliser OpenKeyReadOnly sous D7 si tu veux accéder à la clé 64 bits. Cette méthode force le flag KEY_READ uniquement, KEY_WOW64_64KEY est perdu. Pas de problème avec les Delphi récents.

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Bonjour et merci Andnotor ;-)

    cela fonctionne en effet avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TRegistry.create(KEY_READ or $100);
    La constante KEY_WOW64_64KEY n'est pas référencée sur mon poste mais on la trouve ici :

    https://docs.microsoft.com/fr-fr/win...ectedfrom=MSDN

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 479
    Points : 267
    Points
    267
    Par défaut
    Bonjour

    Le problème signalé dans le post initial résout le problème de l'ouverture de la clé de registre sur les systèmes Windows Seven ou Windows 10.
    Mais il semble qu'il renaisse en version Windows 11 (pour être précis Windows 11 Home)

    Le source suivant :
    Code : 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
    
    AnsiString S;
    AnsiString KeyName="Software\\FireBird project\\FireBird Server\\Instances";
    AnsiString KeyValue="DefaultInstance",
    
      TRegistry *Registry = new TRegistry(KEY_READ | KEY_WOW64_64KEY); 
      try
      {
        Registry->RootKey = HKEY_LOCAL_MACHINE;
        Registry->OpenKey(KeyName,false);
        S = Registry->ReadString(KeyValue);
      }
      __finally
      {
        delete Registry;
      }
      return S;
    retourne "C:\\Program Files\\Firebird\\Firebird_2_1\\" sur un poste Windows Seven 7 Pro et sur poste Windows 10 Pro mais une chaine vide sur un poste Windows 11 et ceci même si l'on execute le programme en mode administrateur.

    Je précise qu'évidemment Firebird 2.1 est installé sur le poste Win 11.

    Après une recherche sur le net concernant Windows 11 je reste sans explication.

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 694
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par frantzgac Voir le message
    Je précise qu'évidemment Firebird 2.1 est installé sur le poste Win 11.
    Tu t'es trompé en installant la version 32 bits alors

Discussions similaires

  1. [Inno setup/IsTool] lire la base de registre à l'instalation et la désinstalation
    Par méphistopheles dans le forum Installation, Déploiement et Sécurité
    Réponses: 8
    Dernier message: 02/05/2006, 19h32
  2. Lire la base de registre d'un poste distant
    Par Mut dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/04/2006, 18h12
  3. [Loulou24] lire la base de registre
    Par rzayani dans le forum Windows
    Réponses: 1
    Dernier message: 17/03/2006, 09h56
  4. [C#] Lire une base de registre distante
    Par Scorff dans le forum C#
    Réponses: 2
    Dernier message: 08/11/2005, 14h39
  5. Comment lire la base de registres d'une machine distante ?
    Par chtiot dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 12h45

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