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

C++Builder Discussion :

Lecture du registre sous VISTA/SEVEN


Sujet :

C++Builder

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Je tente d'ouvrir une clef en lecture seule dans la base de registre sous HKLM.
    Cette ouverture est systématiquement refusée alors que la clef existe bien.
    Autant je peux comprendre que le système bloque l'écriture dans la base de registre sous la clef HKLM, autant je pige pas le blocage pour une simple lecture.
    Je me trompe ou c'est impossible (y compris en élevant le programme au privilège administrateur) ?

    En complément d'information, voilà le bloc de code utilisé pour la tentative de lecture de la clef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Registre = new TRegistry();
    Registre->RootKey = HKEY_LOCAL_MACHINE;
    Registre->Access = KEY_READ;
    if (!Registre->OpenKeyReadOnly("\\SOFTWARE\\Firebird Project\\Firebird Server\\Instances")) throw Exception("Ouverture de la clef de registre '\\SOFTWARE\\Firebird Project\\Firebird Server\\Instances' impossible.");
    _____
    __
    _

    Engi

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut engi
    Ceci fonctionne chez moi BCB6 Window7
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <registry.hpp>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TRegistry *registre = new TRegistry();
    TStringList *mesCles = new TStringList();
    registre->OpenKeyReadOnly("Software\\Borland\\C++Builder\\6.0"); // clé courante
    registre->GetValueNames(mesCles); // lecture des noms
    // affichage d'une des valeurs
    AnsiString val, res;
    //val = mesCles->Strings[20];
    bool re = registre->OpenKeyReadOnly("LMKEY");
    res = registre->ReadString("LMKEY");   //      val + "=" +
    ShowMessage(res); // affiche "Version=PRO"
    delete registre;
    delete mesCles;
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Je viens de faire le test avec ton code.
    Pour info, j'utilise RadStudio XE sous Windows 7 64 bits.
    Comme la clef Borland\C++Builder n'existe pas, je l'ai remplacée par ma clef.
    Ca ne fonctionne pas, j'ai toujours le même refus.
    Bizarrement, j'ai testé avec d'autres clefs et ça fonctionne aléatoirement.
    Par exemple, si je tente d'ouvrir Software\Piriform (CCleaner) ou Software\RealVNC, c'est ok.
    Par contre, une autre clef comme Software\Sonic, c'est comme Firebird, ça ne fonctionne pas !
    J'ai comparé les autorisations de ces différentes clefs et elles sont identiques
    _____
    __
    _

    Engi

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 519
    Points : 25 037
    Points
    25 037
    Par défaut
    Dans Regedit, tu peux voir les droits !
    Certains clés peuvent avoir un droit très limité, juste le système et le créateur de la clé !
    Cela peut venir d'une installation qui a été faite pour un profil utilisateur et non pour tous !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Grille
    Dans la base de registre verifie Edition -> Autorisations pour les clefs concernees
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    j'ai fait des vérifications.
    la clef firebird à laquelle je n'arrive pas à accéder à les mêmes autorisations qu'une autre à laquelle j'accède sans problème !
    j'ai fait un test sous vista et le problème est le même.
    difficile d'imaginer que cette clef qui sert à localiser la dll client de firebird soit créée dans la base de registre de façon à ne pas être lue après ...
    _____
    __
    _

    Engi

  7. #7
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Avril 2004
    Messages : 249
    Points : 112
    Points
    112
    Par défaut
    Bizarre !
    Rien fait de particulier mais maintenant, ça fonctionne, j'arrive bien à lire la clef ...
    Pourtant, le code n'a pas été modifié d'une virgule
    _____
    __
    _

    Engi

  8. #8
    Membre chevronné Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 906
    Points : 2 130
    Points
    2 130
    Par défaut
    Juste pour info, attention aussi aux chemins sous un Win 7 64.

    La fonction d'ouverture d'une cle de builder, étant 32 bits, va aller la chercher dans
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\
    et non pas dans
    [HKEY_LOCAL_MACHINE\SOFTWARE\

    Du coup, si ta cle est direct sous [HKEY_LOCAL_MACHINE\SOFTWARE\] ton programme sur un OS 32 la trouve bien.
    Mais sur un OS 64, "Wow6432Node" est ajouté automatiquement au chemin à ouvrir et la cle n'est pas trouvée, et ça génère une erreur à l'ouverture.

    Une cle d'application 32 sous un OS 64 si elle est bien faite, doit etre sous [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\
    mais certaines forcent le chemin complet donc sans le WOW6432Node ajouté par l'API windows si on ne force pas.

    Le passage à 64 à parfois le mérite de montrer les applications mal faites

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Serveur COM sous Vista/Seven
    Par Andnotor dans le forum Langage
    Réponses: 3
    Dernier message: 19/10/2009, 17h15
  2. Ecriture, lecture de la base de registre sous vista
    Par ninaleo dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 05/12/2008, 10h07
  3. [WD5.5] Base de registre sous Vista
    Par grimbd dans le forum WinDev
    Réponses: 6
    Dernier message: 24/07/2007, 13h21
  4. base de registre sous vista
    Par Maitre Dragon dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2007, 10h04
  5. ocx registration sous vista
    Par mlequi dans le forum Windows Vista
    Réponses: 3
    Dernier message: 02/06/2007, 20h33

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