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

VB 6 et antérieur Discussion :

Recherche dans la base de registre le chemin d'un exe


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut Recherche dans la base de registre le chemin d'un exe
    Bonjour,

    Je voudrais, à partir d'un programme en VB6, trouvé le chemin de l'exe d'un autre programme.

    J'ai 2 programmes qui sont complémentaires, le 2éme programme rajoute en faite des fonctionnalités au 1er mais reste autonome puisqu'il peut être livrée au client tel quel.

    Je voudrais donc que lorsque je démarre mon programme n°1 je cherche dans la base de registre si le programme n°2 est installé et récupérer le chemin de l'exe. Ainsi a partir du programme N°1 je pourrais lancer le N°2.

    Je pose la question ici ,mais je vais chercher en même temps si je trouve quelque chose, la question à peu être et surement déjà été posée.

  2. #2
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Bonjour,
    Rien n'oblige à ce qu'un exécutable Automation ou non soit Systématiquement inscrit dans la base de registre
    sauf si cette action est générée par vous même via le setup et dans ce cas vous êtes censé en connaitre le chemin puisque vous en êtes l'initiateur.
    Pour information, sous VB6 il y a SaveSetting & co qui génére une entrée dans HKEY_CURRENT_USER => Software\VB and VBA Program Settings.

    Il existe d'autres alternatives plus fiables :
    - getmodulehandle/getmodulefilename
    - flag dans un fichier mappé en mémoire
    - ou solution plus ancienne, les liens DDE
    Il en existe probablement d'autres tout aussi exotiques

  3. #3
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Bonjour,
    Rien n'oblige à ce qu'un exécutable Automation ou non soit Systématiquement inscrit dans la base de registre
    sauf si cette action est générée par vous même via le setup et dans ce cas vous êtes censé en connaitre le chemin puisque vous en êtes l'initiateur.
    Pour information, sous VB6 il y a SaveSetting & co qui génére une entrée dans HKEY_CURRENT_USER => Software\VB and VBA Program Settings.

    Il existe d'autres alternatives plus fiables :
    - getmodulehandle/getmodulefilename
    - flag dans un fichier mappé en mémoire
    - ou solution plus ancienne, les liens DDE
    Il en existe probablement d'autres tout aussi exotiques
    Merci pour ces informations.

    Nous ajoutons effectivement dans le registre lors de l'installation le chemin, Donc nous somme censé connaitre le chemin de l'exe effectivement.

    Mais nous laissons le choix du lieu d'installation au client. Donc le chemin pourrais être différent, se choix s'explique parce que nous rencontrons quelques souci avec l’installation de nos logiciels sur des PC équipé de Vista ou Win7 64Bits.

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Je ne vois pas où est le problème.
    Une solution très simple : au lancement de l'application dont il est nécessaire de connaitre le chemin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=getsetting(app.EXEName,chr(0),chr(0)): ? s: if s="" then savesetting app.EXEName,chr(0),chr(0),app.Path
    Ensuite il suffit de récupérer la valeur de GetSetting avec le nom prédéfini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=getsetting(cstEXEName,chr(0),chr(0))

  5. #5
    Expert éminent
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 839
    Points : 9 222
    Points
    9 222
    Par défaut

    Je ne sais pas si ça vous intéresse ce genre de script qui fait ceci :
    • Rechercher dans votre base de Registre et trouver tous les instances du mot saisi.
    • possibilité de sauvegarder le résultat de recherche avec WordPad.
    • on peut aussi sauvegarder le fichier avec l'extension ".reg", pour l'utiliser afin de restaurer chaque changement de Registre que vous faites pour ces valeurs.

    c'est une source que j'ai trouvé dans le net par © Bill James

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    'RegSrch.vbs - Search Registry for input string and display results.
    ' Bill James - wgjames@mvps.org
    ' revised 20 Apr 2001 (parses regfile ~3X faster)
    ' revised 13 Dec 2001 (added Regedit command line switch for Win2K/WindXP)
     
    Option Explicit
    Dim oWS : Set oWS = CreateObject("WScript.Shell")
    Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
     
    Dim sSearchFor
    sSearchFor = InputBox("This script will search your Registry and find all " & _
                 "instances of the search string you input."  & vbcrlf & vbcrlf & _
                 "This search could take several minutes, so please be patient." & _
                 vbcrlf & vbcrlf & "Enter search string (case insensitive) and " & _
                 "click OK...", WScript.ScriptName & " " & Chr(169) & " Bill James")
     
    If sSearchFor = "" Then Cleanup()
     
    Dim StartTime : StartTime = Timer
     
    Dim sRegTmp, sOutTmp, eRegLine, iCnt, sRegKey, aRegFileLines
     
    sRegTmp = oWS.Environment("Process")("Temp") & "\RegTmp.tmp "
    sOutTmp = oWS.Environment("Process")("Temp") & "\sOutTmp" & _
              Hour(Now) & Minute(Now) & Second(Now) & ".tmp "
     
    oWS.Run "regedit /e /a " & sRegTmp, , True '/a enables export as Ansi for WinXP
     
    With oFSO.OpenTextFile(sOutTmp, 8, True)
      .WriteLine("REGEDIT4" & vbcrlf & "; " & WScript.ScriptName & " " & _
        Chr(169) & " Bill James" & vbcrlf & vbcrlf & "; Registry search " & _
        "results for string " & Chr(34) & sSearchFor & Chr(34) & " " & Now & _
        vbcrlf & vbcrlf & "; NOTE: This file will be deleted when you close " & _
        "WordPad." & vbcrlf & "; You must manually save this file to a new " & _
        "location if you want to refer to it again later." & vbcrlf & "; (If " & _
        "you save the file with a .reg extension, you can use it to restore " & _
        "any Registry changes you make to these values.)" & vbcrlf)
     
      With oFSO.GetFile(sRegTmp)
        aRegFileLines = Split(.OpenAsTextStream(1, 0).Read(.Size), vbcrlf)
      End With
     
      oFSO.DeleteFile(sRegTmp)
     
      For Each eRegLine in aRegFileLines
        If InStr(1, eRegLine, "[", 1) > 0 Then sRegKey = eRegLine
        If InStr(1, eRegLine, sSearchFor, 1) >  0 Then
          If sRegKey <> eRegLine Then
            .WriteLine(vbcrlf & sRegKey) & vbcrlf & eRegLine
          Else
            .WriteLine(vbcrlf & sRegKey)
          End If
          iCnt = iCnt + 1
        End If
      Next
     
      Erase aRegFileLines
     
      If iCnt < 1 Then
        oWS.Popup "Search completed in " & FormatNumber(Timer - StartTime, 0) & " seconds." & _
                  vbcrlf & vbcrlf & "No instances of " & chr(34) & sSearchFor & chr(34) & _
                  " found.",, WScript.ScriptName & " " & Chr(169) & " Bill James", 4096
        .Close
        oFSO.DeleteFile(sOutTmp)
        Cleanup()
      End If
      .Close
     
    End With
     
    oWS.Popup "Search completed in " & FormatNumber(Timer - StartTime, 0) & " seconds." & _
              vbcrlf & vbcrlf & iCnt & " instances of " & chr(34) & sSearchFor & chr(34) & _
              " found." & vbcrlf & vbcrlf & "Click OK to open Results in WordPad.",, _
              WScript.ScriptName & " " & Chr(169) & " Bill James", 4096
     
    oWS.Run "WordPad " & sOutTmp, 3, True
     
    oFSO.DeleteFile(sOutTmp)
     
    Cleanup()
     
    Sub Cleanup()
      Set oWS = Nothing
      Set oFSO = Nothing
      WScript.Quit
    End Sub

  6. #6
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Je ne vois pas où est le problème.
    Une solution très simple : au lancement de l'application dont il est nécessaire de connaitre le chemin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=getsetting(app.EXEName,chr(0),chr(0)): ? s: if s="" then savesetting app.EXEName,chr(0),chr(0),app.Path
    Ensuite il suffit de récupérer la valeur de GetSetting avec le nom prédéfini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s=getsetting(cstEXEName,chr(0),chr(0))
    Je ne connais pas le chemin justement, ou du moins je peux supposer un chemin et vérifier s'il est présent, mais si l’utilisateur à installer le logiciel n°2 dans un autre chemin que celui proposé par défaut je serais perdu.

    Ou alors je comprend pas ce que tu essaie de me dire, ou je me suis mal exprimé.

    Je récapitule:

    J'ai 2 logiciels qui s'installe indépendamment l'un de l'autre. Le logiciel n°1 peut appeler le N°2 s'il est présent (par exemple dans le menu Fichier/démarrer log 2) pour rajouter des fonctionnalité.

    En faite le log.1 est un log. de configuration, alors que le 2 est un logiciel pour sauvegarder ou patcher la configuration de notre supervision.

    Le logiciel n°2 fonctionne tout seul donc et peut être envoyer au client seul, juste pour sauvegarder ou si l'on a une petite modif à lui faire faire à l'aide d'un patch.

    Donc lorsque je démarre le log.1 je ne sais pas si le log.2 a déjà été installé

    Logiquement le log. 1 est installé :
    C:\program Files\Entité\Log1\LeLog1.exe

    et si le client a installé le log. 2 et pas changer de chemin d’installation:
    C:\program Files\Entité\Log2\LeLog2.exe

    Mais s'il est changer je ne peux pas le trouver, donc c'est pour cela que je pensais que l'on peut trouver le chemin d'installation du log.2 dans la base de registre si il a été installé.

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Je pensais avoir été clair

    Dans la phase d'initialisation du logiciel LeLog2 (Main ou form_Initialize)
    placer le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if getsetting(app.EXEName,chr(0),chr(0))<>App.path then savesetting app.EXEName,chr(0),chr(0),app.Path
    Cela aura pour effet d'ajouter à la 1ère utilisation de LeLog2 une entrée dans la base de registre.


    Dans LeLog1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log2Path=getsetting("LeLog2",chr(0),chr(0))
    Log2Path contient le chemin d'installation de LeLog2 ou rien s'il n'est pas installé
    Il pourrait être utile de vérifier la présence de l'exe correspondant dès fois de LeLog2 ait été ensuite désinstallé.

    Je ne pourrais pas faire une explication plus claire

  8. #8
    Membre averti Avatar de megamario
    Homme Profil pro
    VB6/VB.net/C/C++/C#
    Inscrit en
    Septembre 2008
    Messages
    929
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : VB6/VB.net/C/C++/C#
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2008
    Messages : 929
    Points : 312
    Points
    312
    Par défaut
    C'est parfait comme explication

    Merci d'avoir été indulgent.

  9. #9
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 130
    Points : 3 118
    Points
    3 118
    Par défaut
    Pas de problème : tu es tombé sur un bon jour

    Attention tout de même à ce que l'entrée par défaut ne soit pas utilisée pour une autre valeur
    sinon utiliser un nom de clé spécifique (Log2_Path par ex).

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

Discussions similaires

  1. [Batch] Comment rechercher une valeur dans la base de registre et la modifier
    Par elminio75 dans le forum Scripts/Batch
    Réponses: 14
    Dernier message: 13/03/2018, 09h16
  2. Composant de recherche dans la base de registre
    Par Pierre Castelain dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 12/02/2013, 17h11
  3. [PowerShell] Recherche d'un programme dans la base de registre
    Par maxime1452 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 25/05/2011, 13h47
  4. Réponses: 1
    Dernier message: 02/07/2010, 11h10
  5. recherche dans la base de registre
    Par yerosnimus dans le forum Windows
    Réponses: 3
    Dernier message: 28/03/2008, 15h59

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