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 :

trouver les Num de version


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut trouver les Num de version
    Bonjour a tous.
    depuis XE .. je ne parviens plus a récupérer dans les appli (services ou appli Windows) le numéro de version de cette appli afin de l'afficher en début d’exécution.
    J'utilise encore XP, Seven .. et prochainement Windows 8 sous lesquels mes appli seront utilisées.

    D'avance merci a celui ou ceux qui pourraient m'aider

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 681
    Points : 7 112
    Points
    7 112
    Par défaut
    Tu utilisais quel fonctions jusqu'à présent ?

  3. #3
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    Voila ce que je faisais pour les applis windows ..
    ca plante pas mais ca retourne une chaine vide
    Meme style pour les service apres avoir trouvé le repertoire d'install
    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
    
    // --------------------------------------------------------------GetAppVersion
    // Pour aplication Windows classique
    // Appel : x := GetGetAppVersion(Application.exename);
    Function GetAppVersion (SvcName : String):String;
    Var
      S         : String;
      Taille    : DWord;
      Buffer    : PChar;
      VersionPC : PChar;
      VersionL  : dword;
    begin
      S := Svcname;
      Taille := GetFileVersionInfoSize(PChar(S), Taille);
      If Taille>0
      Then Try
      {--- Réservation en mémoire d'une zone de la taille voulue ---}
        Buffer := AllocMem(Taille);
      {--- Copie dans le buffer des informations ---}
        GetFileVersionInfo(PChar(S), 0, Taille, Buffer);
      {--- Recherche de l'information de version ---}
        If VerQueryValue(Buffer, PChar('\StringFileInfo\040C04E4\FileVersion'), Pointer(VersionPC), VersionL)
          Then Result:=VersionPC;
      Finally
        FreeMem(Buffer, Taille);
      End;
    end;
    // --------------------------------------------------------------- GetAppVersion
    
    

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 885
    Points : 11 403
    Points
    11 403
    Billets dans le blog
    6
    Par défaut
    Problème de AnsiString/AnsiChar/PAnsiChar ?

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 593
    Points
    25 593
    Par défaut
    Et les fonction de la
    Comment récupérer le numéro de version de mon application ?

    omment obtenir les informations de version d'un programme ?


    Sont-elles toutes compatibles XE ?

    Dommage que VersionInfo.pas par [SFX]-Zeus et SystmD semble être encore orienté Ansi donc pas compatible 2009,XE...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    ici

  7. #7
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut les nouvelles chaines .. !!
    mon code fonctionne avec les anciennes version Delphi.
    Je pense que Tourlourou a raison. Je vais rechercher autour des aménagements relatifs aux nouvelles gestions de string.

    Pour info mon code est issu des forums ou FAQ d'ici ..
    mais c'est bien de le rappeler

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    La langue de ton projet n'est pas le français
    Le code que je t'ai donné ci-dessus ne s'en préoccupe pas. Il prend la première disponible.

  9. #9
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    tu écris en français .. mais je crois ne pas avoir tout saisis ..

    en tout cas, je viens d'essayer ton module.. je bute sur un probleme d'appel surchargé ambigu a strpas'

    pas simple parfois de s'adapter aux évolutions des progiciels.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Dans les options du projet, va sous Information de version et contrôle la langue choisie

    Au pire si ce n'est pas le français, tu peux modifier la langue dans ta fonction. StringFileInfo\040C04E4\FileVersion.

  11. #11
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut suite des essais. du module andnotor
    pour supprimer l'erreur sur StrPas j'ai corrigé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        if VersionQueryValue(format(TranslationFormat , [SubBlock, QueryValue]), QueryResult) then
          Result := StrPas(pansichar(QueryResult));
    Apres essais, la version retournée ne comporte que la partie unité de la version et pas la partie décimale
    si la version réelle est "1.1" la valeur retournée est "1"
    la version est bien française..
    L'info version est bien validée
    comment obtenir les décimales aussi ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Cette routine mériterait d'être mise à jour mais... je ne suis pas au bureau

    Result attend de l'unicode et non du ANSI. PAnsiChar n'est pas utilisable puisque le deuxième octet est rempli avec #0 (d'où la chaîne tronquée). Essaye simplement Result := PChar(QueryResult);.

  13. #13
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut ça progresse !!
    En effet, ça marche mieux.
    J'obtiens 1.1.0.0 et non 1
    Sauf que la version réelle est plus développée soit par exemple : 1.1.49xx.12345
    C’était mieux en incrémentant simplement mais cela ne semble plus possible avec XE2 automatiquement.
    Je vais attendre ton retour de vacances
    Merci en tout cas et bonnes vacances

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Vacances, faut le dire vite, trois jours tout au plus

    Tu devrais retrouver la même info que par un clique droit sur l'exe.
    Il y a plusieurs options possibles sous XE2+ et on peut toujours la mettre en auto-incrémentée. Mais il faut admettre que multiplier le remplissage pour les versions debug, release, 32 et 64 bits n'est pas des plus logiques

  15. #15
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut
    hé bien non, justement.
    Ce n'est pas la même info..
    Même en prenant soin des options.
    j'ai testé avec ou sans incrément
    Sans incrément en fixant 1.2.3.4 l'exe et le module renvoient 1.2.0.0 les 2 dernières valeurs ne semblent pas être prises en compte par le compilateur.
    Avec incrément on ne peut fixer que 1.2 par exemple et l'exe donne 1.2.4026.85120 alors que le module ne renvoi que 1.2

    a moins que j'ai oublié qq chose
    allez .. bon repos

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 831
    Points : 13 579
    Points
    13 579
    Par défaut
    Bon, de retour (déjà )

    J'ai refait un essai avec la version précédente. Résultat, pas de soucis ! Les quatre numéros sont correctement récupérés.
    1.2.4026.85120 n'est pas possible ! chaque numéro est un word.

    Sinon, voici une nouvelle version simplifiée :
    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
    //aQuery peut prendre ces valeurs:
    //Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion
    //FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild
    function GetFileInfo(aFileName :TFileName; aQuery :string = 'FileVersion') :string; overload;
    var
      Block  :pointer;
      Buffer :pointer;
      Size   :cardinal;
      Dummy  :cardinal;
     
    begin
      Result := '';
     
      Size := GetFileVersionInfoSize(PChar(aFileName), Dummy);
     
      if Size > 0 then
      begin
        GetMem(Block, Size);
     
        try
          if GetFileVersionInfo(PChar(aFileName), 0, Size, Block) and
             VerQueryValue(Block, '\VarFileInfo\Translation', Buffer, Size) and
             VerQueryValue(Block, PChar(Format('\StringFileInfo\%.4x%.4x\%s', [word(Buffer^), HiWord(dword(Buffer^)), aQuery])), Buffer, Size) then
            SetString(Result, PChar(Buffer), Size);
     
        finally
          FreeMem(Block);
        end;
      end;
    end;
    et une autre qui permettrait de récupérer les informations localisées (bien sûr aucun intérêt pour le numéro de version ) :

    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
    //aQuery:
    //  Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion
    //  FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild
    //aLanguage:
    //  français (France): $040C, anglais (Etats-Unis): $0409, etc.
    function GetFileInfo(aFileName :TFileName; aQuery :string; aLanguage :word; aCodePage :word = 0) :string; overload;
    type
      TTranslation = record
        Language :word;
        CodePage :word;
      end;
     
      PTranslations = ^TTranslations;
      TTranslations = array[0..0] of TTranslation;
     
    var
      Block        :pointer;
      Buffer       :pointer;
      Size         :cardinal;
      Dummy        :cardinal;
      Translations :PTranslations;
      Count        :integer;
      i            :integer;
      Index        :integer;
     
    begin
      Result := '';
     
      Size := GetFileVersionInfoSize(PChar(aFileName), Dummy);
     
      if Size > 0 then
      begin
        GetMem(Block, Size);
     
        try
          if GetFileVersionInfo(PChar(aFileName), 0, Size, Block) and
             VerQueryValue(Block, '\VarFileInfo\Translation', pointer(Translations), Size) then
          begin
             //Nombre de traductions
             Count := Size div SizeOf(TTranslation);
     
             //Si la langue n'est pas disponible, renverra la première info de la liste
             Index := 0;
     
             if Count > 1 then
               for i := 0 to Count -1 do
                 //Langue recherchée ?
                 if Translations[i].Language = aLanguage then
                 begin
                   //Au minimum, renverra l'info dans la bonne langue
                   Index := i;
     
                   //Si bon CodePage ou si CodePage pas requis => trouvé !
                   if (Translations[i].CodePage = aCodePage) or (aCodePage = 0) then
                     Break;
                 end;
     
            if VerQueryValue(Block, PChar(Format('\StringFileInfo\%.4x%.4x\%s', [Translations[Index].Language, Translations[Index].CodePage, aQuery])), Buffer, Size) then
              SetString(Result, PChar(Buffer), Size);
          end;
     
        finally
          FreeMem(Block);
        end;
      end;
    end;

  17. #17
    Membre habitué
    Homme Profil pro
    conseil et développeur en informatique industrielle
    Inscrit en
    Janvier 2006
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : conseil et développeur en informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2006
    Messages : 220
    Points : 165
    Points
    165
    Par défaut curieuse observation
    En regardant les propriétés de l'exe, on remarque qu'il y a 2 réponses différentes pour la version du fichier.
    voir fichier joint
    la 1 ere est celle que je recherche (1.0.4980.33871) elle figure hors du cadre "autre information de version"
    La 2 ème (dans le cadre) indique 1.0.0.0 c'est la valeur que je récupère par programme.
    La langue n'est pas celle définie dans les options du projet.

    problème de configuration ? mais ou ??
    Images attachées Images attachées  

Discussions similaires

  1. Où trouver les dernières versions des OCX ?
    Par PhunkyBob dans le forum Installation, Déploiement et Sécurité
    Réponses: 5
    Dernier message: 06/05/2011, 17h10
  2. Réponses: 12
    Dernier message: 20/11/2007, 08h38
  3. Réponses: 1
    Dernier message: 02/03/2006, 16h07
  4. [GUI] Ou trouver les standard ?
    Par Braim dans le forum Windows
    Réponses: 5
    Dernier message: 01/10/2003, 09h13

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