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

Lazarus Pascal Discussion :

Comment lire HKLM Win64 avec une appli Win32 ? [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 538
    Points
    538
    Par défaut Comment lire HKLM Win64 avec une appli Win32 ?
    Bonsoir,
    Dans une application j'ai besoin de connaître le répertoire d'installation d'un programme (Firebird serveur dans cet exemple). Pour cela j'utilise le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        with TRegistry.Create do
        try
          RootKey:=HKEY_LOCAL_MACHINE;
          if OpenKeyReadOnly('SOFTWARE\Firebird Project\Firebird Server\Instances') then
          begin
    etc...
    Compilé avec Lazarus Win32, pas de problème sous XP 32b, mais sous W7 64b, OpenKeyReadOnly retourne False.
    Compilé avec Lazarus Win64, ce code fonctionne bien sous W7 64b.
    La lecture de HKCU au lieu de HKLM ne pose pas ce problème.
    N'y a-t-il pas d'autre solution que de faire une version 64b de l'application pour fonctionner sous Win64 et une autre version 32b pour fonctionner sous Win32?

    André

    PS si çà peut faire avancer le schmilblick.
    Je me suis aperçu que OpenKeyReadOnly renvoie bien True quand la clef dans HK_LOCAL_MACHINE\SOFTWARE\ est celle d'une application 32b. Mais celles-ci sont relativement rares car quand on consulte la BDR avec Regedit, ces appli 32b figurent généralement dans HK_LOCAL_MACHINE\SOFTWARE\Wow6432Node\. Et encore plus curieusement elles répondent "présent" quand on les cherche dans HK_LOCAL_MACHINE\SOFTWARE\. Arrr... Windows et ses redirections...
    Mais tout çà ne résout pas le problème, par ce moyen on ne peut pas trouver à partir d'une application 32b, le chemin d'une application 64b installée et la lancer. Pourtant en donnant le chemin "en dur" un TProcess dans une appli 32b exécute apparemment correctement l'appli 64b.

  2. #2
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Il y a trois fonctions de l'API pour ça.

    http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

    MSDN, toujours pratique.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 248
    Points : 538
    Points
    538
    Par défaut
    Bonsoir,

    Merci CapJack. Le renseignement m'a permis de résoudre le problème.
    Dans TRegistry j'ai ajouté la constante KEY_WOW64_64KEY=$0100 et dans la fonction OpenKeyReadOnly, remplacé KEY_READ par KEY_READ or KEY_WOW64_64KEY.
    J'ai ajouté l'unité TRegistry à mon projet et çà marche, en attendant d'apprendre comment recompiler les sources de fpc, car je ne vois pas quels peuvent être les inconvénients de cette modification dans la fonction OpenKeyReadOnly.

    André

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/01/2014, 09h14
  2. Réponses: 2
    Dernier message: 03/07/2013, 12h55
  3. Réponses: 4
    Dernier message: 05/04/2013, 14h20
  4. Réponses: 1
    Dernier message: 06/03/2009, 10h02
  5. Réponses: 2
    Dernier message: 24/04/2007, 13h52

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