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 :

Clé de la base de registre qui ne s'ouvre pas [Système/Fichiers/API]


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut Clé de la base de registre qui ne s'ouvre pas
    Bonjour,

    Avec C++Builder XE4, j'essaie d'ouvrir une clé de la base de registre qui existe et dont les droits sont suffisants pour être lus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Reg = new TRegistry(KEY_READ);
    Reg->RootKey = HKEY_LOCAL_MACHINE;
    Reg->OpenKeyReadOnly("Software\\Classes\\Outlook.Application\\CLSID");
    if (Reg->ValueExists(""))
      {
      CLSID = Reg->ReadString("");
      Reg->OpenKeyReadOnly("Software\\Classes\\CLSID\\" + CLSID + "\\LocalServer32"); //La clé ne s'ouvre pas
      if (Reg->ValueExists(""))
         {
         OutlookPath->Text = Reg->ReadString("");
         }
      }
    J'ai déjà essayé de lancer le programme en mode administrateur et de lire directement la clé sans passer par la 1ère recherche ou d'utiliser OpenKey en KEY_ALL_ACCESS.
    Rien n'y fait. Si je mets un if sur la ligne en question, il est flagrant que la clé ne s'ouvre pas.

    Je cherche à déterminer dynamiquement le chemin d'Outlook pour le lancer avec des paramètres et il ne me manque plus que cette étape.

    Je me suis basé sur cette documentation de Microsoft.
    https://support.microsoft.com/fr-fr/...ce-application

    Je test sur Windows 10 Pro (64 bit) 1709 16299.19 fraîchement installé.

    Quelqu'un aurait une idée ?

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Salut,
    Ton code est parfaitement fonctionnel pour une version 64 bits d'office dans le cas ou tu utilise la version 32 bits d'office ces clés sont situées sous
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node
    il convient donc de tester au préalable quelle version d'office est installée sur la machine
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Merci pour l'info. Je vais modifier le programme pour en tenir compte.
    Sur le pc sur lequel je teste, c'est bien une version 64 bit qui est installé et la clé existe bien.

    Je n'ai pas encore trouvé de réponse à ma question et je suis dans l'impasse pour l'instant.
    Ce n'est pas très grave mais j'aimerais savoir pourquoi ça ne fonctionne pas.
    Y a-t-il un moyen pour avoir des détails comme un log avec la fonction OpenKeyReadOnly ?

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    l'object Registry te donne une information sur le code d'erreur retrouvé à partir de la il est assez simple de retrouver le message d'erreur de Windows

    pour info sur ta machine équipée de la même version de Windows ton code me ressort bien l'information demandée

    cdlt


    Citation Envoyé par gandf Voir le message
    Merci pour l'info. Je vais modifier le programme pour en tenir compte.
    Sur le pc sur lequel je teste, c'est bien une version 64 bit qui est installé et la clé existe bien.

    Je n'ai pas encore trouvé de réponse à ma question et je suis dans l'impasse pour l'instant.
    Ce n'est pas très grave mais j'aimerais savoir pourquoi ça ne fonctionne pas.
    Y a-t-il un moyen pour avoir des détails comme un log avec la fonction OpenKeyReadOnly ?
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Par défaut
    Je n'avais jamais vu cette propriété.
    J'ai donc le message d'erreur suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le fichier spécifié est introuvable
    J'ai donc un peu trafiqué le code et lancé l'application en administrateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Reg = new TRegistry;
    Reg->RootKey = HKEY_LOCAL_MACHINE;
    if (Reg->OpenKey("SOFTWARE\\Classes\\CLSID\\{0006F03A-0000-0000-C000-000000000046}\\LocalServer322", true))
    Résultat surprenant, c'est la clé suivante qui a été créée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ordinateur\HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{0006F03A-0000-0000-C000-000000000046}\LocalServer322
    Et à cet endroit, il n'y a pas la clé que je recherche.

    Sur la version 64 bit, les programmes 32 bit sont redirigés si on ne spécifie pas le contraire.
    https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx

    Il faut donc utiliser KEY_WOW64_64KEY si l'application est en 32 bit et Windows en 64 bit, l'utiliser comme mode d'accès et utiliser la fonction OpenKey pour ne pas réinitialiser le mode d'accès.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg = new TRegistry(KEY_READ | KEY_WOW64_64KEY);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Reg->OpenKey("Software\\Classes\\CLSID\\" + CLSID + "\\LocalServer32", false);
    Merci pour le coup de main.

    Je pense qu'il faudrait l'ajouter dans la FAQ.

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

Discussions similaires

  1. base de données qui ne se met pas à jour
    Par ludovic44 dans le forum Symfony
    Réponses: 2
    Dernier message: 02/04/2017, 10h54
  2. [PHP 5.3] Connexion à la Base de données qui marche locale mais pas sur internet
    Par med lemine dans le forum Langage
    Réponses: 4
    Dernier message: 12/04/2016, 18h58
  3. [AC-97] Base ACCESS qui ne s'ouvre pas
    Par Milyshyn76 dans le forum Sécurité
    Réponses: 10
    Dernier message: 19/09/2011, 14h12
  4. Réponses: 1
    Dernier message: 02/04/2007, 18h59
  5. Réponses: 4
    Dernier message: 08/03/2007, 21h00

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