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 :

[débutant]récupérer la version d'un executable [FAQ]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut [débutant]récupérer la version d'un executable
    Souhaitant faire apparaitre le numéro de version de l'exécutable utilisé pour générer des fichiers de sortie, dans le nom de ces fichiers de sortie, je souhaiterai savoir s'il existe un moyen de récupérer la "version du fichier" que l'on peut spécifier dans Projet->Options->Informations de version :

    merci pour votre aide

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Par défaut
    Je ne sais pas si ça marche pour une application, mais j'avais trouvé ce code pour les librairie dll... Essaie en remplaçant "myLibrary.dll" par le nom de ton executable...

    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
    //---------------------------------------------------------------------------
    //! Get the version number of the library
    /*! Return the major and minor version numbers as follow
        \return int is 1000*Major+Minor, or 0 if version info not found
     */
    DLLCall DLLExport int Version() {
     
      int result=0;
     
      // Get the size of the information bloc
      char *ExeName = "myLibrary.dll";
      DWORD n = GetFileVersionInfoSize(ExeName, &n);
     
      if (n > 0) {
        // Look for the information bloc
        char *buffer = (char*) malloc(n);
        if (GetFileVersionInfo(ExeName,NULL,n,buffer)) {
          // Look for the version information
          DWORD    infoLen;
          char    *infoData;
          char*    infoQuery="StringFileInfo\\100C04E4\\FileVersion"; //hi-word is the language code from the Info language
          if (VerQueryValue(buffer,infoQuery,(void**)&infoData,(PUINT)&infoLen)) {
            // Extract major version number
            int major=0;
            int minor=0;
            char* dot=strchr(infoData,'.');
            if (dot) {
              *dot='\0';
              major=atoi(infoData);
              // Extract minor version number
              infoData=dot+1;
              dot=strchr(infoData,'.');
              if (dot) {
                *dot='\0';
                minor=atoi(infoData);
              }
            }
            result=1000*major+minor;
          }
        }
        // Free memory
        free(buffer);
      }
     
     
      return result;
     
    }

  3. #3
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    J'ai ce code également (récupéré dans la FAQ ou les Trucs et Astuces)
    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
     
    DWORD Size;//taille
     AnsiString FileName = NomFichier;//nom fichier
     
     Size = GetFileVersionInfoSize(FileName.c_str(), &Size);//récup taille infos
     if (Size > 0)//si info existante
     {
      LPVOID Buffer = malloc (Size); //buffer
     
      GetFileVersionInfo(FileName.c_str(), 0, Size, Buffer);//récup infos
     
      LPVOID Str;//pointeur chaine
      UINT Len;//longueur
      AnsiString temp = "\\StringFileInfo\\040C04E4\\FileVersion";//chaine de ciblage infos
      if (VerQueryValue(Buffer, temp.c_str(), &Str, &Len))//si valeur pour version fichier
      {
       L_Ver->Caption = reinterpret_cast<char *>(Str);//affichage numéro de version
      }
      free (Buffer);//suppression buffer
     }
    FileName étant le chemin complet du fichier dont on veut récupérer le numéro de version

  4. #4
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Par défaut
    merci bien à vous deux ,
    j'ai opté pour la solution de bakaneko qui me paraissait plus simple...

    @++

  5. #5
    ARB
    ARB est déconnecté
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 12
    Par défaut
    J'ai aussi essayé la solution de bakaneko (copier-coller) : impeccable !
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  2. Récupérer le numéroAuto après CurrentDb.Execute strSQL
    Par Tchupacabra dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2006, 16h50
  3. Comment récupérer la version d'un exécutable ?
    Par bib34690 dans le forum Langage
    Réponses: 2
    Dernier message: 19/09/2005, 18h20
  4. Réponses: 7
    Dernier message: 30/06/2005, 10h06
  5. [Débutant] Récupérer les paramètres d'une routine
    Par nifty dans le forum Assembleur
    Réponses: 5
    Dernier message: 18/04/2005, 14h35

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