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

Langage Delphi Discussion :

Impossible de lire clé de registre sous WIN10


Sujet :

Langage Delphi

  1. #1
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut Impossible de lire clé de registre sous WIN10
    Bonjour,

    Avec ce code je n'arrive pas à lire une clé de registre sous windows 10 et ca m'affiche le Showmessage du code ce n'est pas le cas sous XP et 7 :
    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
     
    Function ReadRegistryKey(RegistryRootKey: HKEY;KeyPath,KeyToRead:string):String;
    var
        Registry: TRegistry;
        str:string;
      begin
        Registry := TRegistry.Create(KEY_WRITE);
        try
          Registry.RootKey := RegistryRootKey;
           if not Registry.OpenKeyReadOnly(KeyPath) then showmessage('Impossible de lire clé '+KeyPath);
           str := Registry.ReadString(KeyToRead);
          result:=str;
          Registry.CloseKey;
        finally
          Registry.Free;
        end; // try..finally
      end;
    Et pour lire la clé je fais ceci pour lire la valeur de Init:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ValeurCle:=ReadRegistryKey(HKEY_CURRENT_USER,'Software\MonProg\Settings','Init');
    Es-ce qu'il y a SVP, une autre manière de récupérer les clés de registre sous win10 ?

    J'ai D7 32 bits

    Merci !
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    je pense qu'il manque un \ devant le nom de ta clef. Si ta clef existe cela devrait fonctionner. Par exemple avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      ValeurCle:=ReadRegistryKey(HKEY_CURRENT_USER,'\Software\Embarcadero\FireDAC','FDHome');
      ShowMessage(ValeurCle) ;
    Cela renvoie le bon résultat sous D7 et Win10

    A+
    Charly

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    PS : avec D7 j'aurai du prendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      ValeurCle:=ReadRegistryKey(HKEY_CURRENT_USER,'\Software\Borland\ETM\7.0','EditorFilename');
      ShowMessage(ValeurCle) ;
    Qui va bien aussi

    A+
    Charly

  4. #4
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    RePS : Ta clef est bien de type String ?

    A+
    Charly

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Je pense pas que ca marcherait parce que c'est une affaire de de KEY_WOW64_64KEY comme dans ce post je dis ne pense pas si j'avais win10 j'aurais tester ta variante mais après maintes recherches epuisantes et sans résultats je fais comme SergioMaster dans ce post, d'ailleurs c'est le dernier sur lequel je suis tombé, alors j'abandonne la méthode de l'inscription dans le registre. D'ailleurs dans mes app j'ai commencé par supprimés ces lectures du reg et même virer la chose depuis innosetup c'est vraiment une corvée ce registre 64bit. Merci quand même.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #6
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    J'ai pas vu ton post pendant que je composait le mien oui c'est du type String. Je souhaitais une solution qui marcherait à coup sûr mais réflexion faite je viens d'abandonné la méthode du registre parce que je n'ai pas de plateforme 64 bit ni de win10 pour tester. Merci quand même Charly910
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Il n'y a pas de redirection sous HKEY_CURRENT_USER.

    Citation Envoyé par freud Voir le message
    je n'ai pas de plateforme 64 bit ni de win10 pour tester.
    Donc comment tu sais que ça marche pas ?


    Soit la clé n'est pas valide, soit elle nécessite des autorisations spéciales. Pas de différence entre Win7 et 10.

  8. #8
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par Andnotor
    Donc comment tu sais que ça marche pas ?
    J'ai trois utilisateurs sous win10 où ca n'a pas marché et un quatrieme où ca a marché sous 7
    Je suis sous XP 32 bit et ca a marché c'est la plateforme de dev. avec D7

    Chez les deux ca leur affiche un message du showmessage qui est dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if not Registry.OpenKeyReadOnly(KeyPath) then showmessage('Impossible de lire clé '+KeyPath);
    chez l'autre ca lui affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Systeme error code:15100
    Le chargeur de ressources n'a pas trouver le fichier MUI
    Pour ce dernier j'avais conclu que c'etait toujours un problème du registre.
    J'ai dis que ca ne marche pas parce que suite à mes recherches notamment sur StackOverFlow les codes proposés sont différents de celui que j'ai posté et je ne pouvais me risquer à les utilisés fautes de plateformes comme je l'ai expliqué plus haut.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par freud Voir le message
    je fais comme SergioMaster dans ce post
    me citer fait gonfler mon égo encore faut-il indiquer ce que je fais

    S'il s'agit de ne plus utiliser la base de registre (AMHA hyper mal fichue) pour stocker des données programmes je ne peux qu'approuver ce choix, une recommandation supplémentaire : stocker ces données dans le répertoire spécifique (appdata ou common_appdata) plus le nom de l'application.
    PS. pour obtenir les chemins spéciaux lire, par exemple, ceci
    (les versions "modernes" de delphi propose l'unité System.IOUtils et les fonctions de TPath)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    A mon avis la clé n'existe pas, tout du moins pour cet utilisateur.

    Si tu écris dans HKCU à l'aide d'Inno Setup et que ton installateur nécessite des droits administrateurs pour s'exécuter, un utilisateur standard ne pourra pas lire cette clé puisqu'elle n'est pas inscrite dans sa ruche mais celle de l'admin. Tu auras exactement le même problème avec un fichier extrait sous %AppData%.

    Même sous XP, tu peux créer un utilisateur standard et essayer de lancer ton app. Je doute qu'elle tourne comme tu le penses.

    Dès lors, la question a poser à tes utilisateurs est s'ils se loguent sur un compte membre du groupe administrateur (dans quel cas ça va fonctionner) ou sur un compte limité.


    Cela dit, ton code est perfectible. Pourquoi lis-tu la valeur et ferme la clé si tu n'as pas pu ouvrir cette clé

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    c'est aussi mon avis, il suffit de demander à tes utilisateurs de vérifier si ta clef existe (s'ils ont les droits de le faire ...)

    A+
    Charly

  12. #12
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour tout le monde,

    Citation Envoyé par SergioMaster
    me citer fait gonfler mon égo encore faut-il indiquer ce que je fais
    Je pense pas que cela soit besoin de l'indiquer dans mon cas il s'agit des infos de l'install
    Mais attention faut pas trop se fier à l'ego
    Durant mes recherches, l'idée d'abandonner le registre à cause de l'UAC me trottait dans la tete et bien avant d'ailleurs mais j'etait indécis alors je suis tombé sur votre post et n'avait plus jus pour continuer et me suis décidé.
    Le registre ne m'appartient pas (surtout le 64bit) alors je ne touche pas à ce qui ne m'appartient pas bien qu'il simplifie les choses je reste avec les fichiers INI.

    Citation Envoyé par Andnotor
    Dès lors, la question a poser à tes utilisateurs est s'ils se loguent sur un compte membre du groupe administrateur (dans quel cas ça va fonctionner) ou sur un compte limité.
    Pour un utilisateur, l'install se déroule bien et l'app est executée en tant qu'administrateur. Mais, ce n'est pas possible d'aller demander aux gens de faire des tests après ca deviendra un autre type de relation alors vous me comprenez ?

    Citation Envoyé par Andnotor
    Cela dit, ton code est perfectible. Pourquoi lis-tu la valeur et ferme la clé si tu n'as pas pu ouvrir cette clé
    Ah oui c'est vrai j'avais oublier l'exit ou l'abort après le message si de ca dont tu veux parler merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if not Registry.OpenKeyReadOnly(KeyPath) then 
    Begin
     showmessage('Impossible de lire clé '+KeyPath);
     Abort;
    end;
    Merci pour le lien SergioMaster
    Merci à tout le monde pour votre aide.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

Discussions similaires

  1. [AC-2007] Impossible d'inscrire clé de registre sous Windows 8
    Par marsouin_89 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/10/2013, 20h08
  2. Réponses: 0
    Dernier message: 05/04/2013, 19h03
  3. impossible de lire sous localhost
    Par dimebagplan dans le forum Langage
    Réponses: 9
    Dernier message: 01/06/2009, 19h31
  4. Ecrire et lire sur la base de registre sous windows
    Par brackaman dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 13/11/2006, 09h50
  5. Créer / Lire des clés registre sous Dev-Cpp
    Par N3odyme dans le forum Windows
    Réponses: 4
    Dernier message: 11/09/2006, 21h08

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