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 :

Gestion de version


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut Gestion de version
    Bonjour a tous,

    désolé si je ne poste au bon endroit..

    Je voudrais savoir si il existe un moyen d’accéder via un code, soit :
    - Aux informations de version de "Delphi".
    - Aux informations des fichiers dans la section propriété.

    La gestion des versions est déjà codé dans chacune des DLLs de l'application et actuellement je passe par l'information des versions delphi (donc à la main pour chacune des DLLs quand je désire tous faire évoluer).

    Action que je voudrais automatiser.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    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 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Citation Envoyé par petitcoucou31 Voir le message
    Je voudrais savoir si il existe un moyen d’accéder via un code, soit :
    - Aux informations de version de "Delphi".
    - Aux informations des fichiers dans la section propriété.
    Voici ce que j'utilise pour CONSULTER ces informations :
    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
       TInfo = (CompanyName, FileDescription, FileVersion, InternalName, LegalCopyright, OriginalFilename, ProductName, ProductVersion);
     
    function GetInfo(Info: TInfo; const szModule: String): String;
    var
       i: Integer;
       nVerInfoSize: LongInt;
       nVerHandle: LongWord;
       szModuleName: Array [0 .. 1024] of Char;
       pVerData, Buffer: Pointer;
       lenBuffer: UINT;
       szLangCharset, szInfo: String;
    begin
       FillChar(szModuleName, SizeOf(szModuleName), 0);
       FillChar(pVerData, SizeOf(pVerData), 0);
       if szModule = '' then
          GetModuleFileName(HInstance, szModuleName, SizeOf(szModuleName))
       else
       begin
          for i:=1 to Length(szModule) do
             szModuleName[i - 1] := szModule[i];
       end;
       nVerInfoSize := GetFileVersionInfoSize(szModuleName, nVerHandle);
       if nVerInfoSize = 0 then
          Exit;
       GetMem(pVerData, nVerInfoSize);
       try
          if not GetFileVersionInfo(szModuleName, nVerHandle, nVerInfoSize, pVerData) then
             Exit;
     
          // Récuperation du LangCharset.
          if VerQueryValue(pVerData, PChar('\VarFileInfo\Translation'), Buffer, lenBuffer) then
          begin
             szLangCharset := IntToHex(LoWord(LongInt(Buffer^)), 4);
             szLangCharset := szLangCharset + IntToHex(HiWord(LongInt(Buffer^)), 4);
          end;
          // Récuperation de l'info.
          szInfo := GetEnumName(TypeInfo(TInfo), Ord(Info));
          if VerQueryValue(pVerData, PChar('\StringFileInfo\' + szLangCharset + '\' + szInfo), Buffer, lenBuffer) and (lenBuffer <> 0) then
             Result := StrPas(PWideChar(Buffer));
       finally
          FreeMem(pVerData, nVerInfoSize);
       end;
    end;
    Si ça peut te donner des idées ...
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Je suis pas sûr d'avoir bien compris, mais si ce que tu veux faire c'est avoir un numéro de version commun entre tes différents dpr, tu peux utiliser un fichier .rc commun.
    Tu trouvera la structure du fichier dans ce message de Paul TOTH.

    Pour le reste, il faut juste désactiver les informations de version dans les options de ton projet, et rajouter la ressource dans le source du dpr:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {$R MonFichier.res MonFichier.rc} //pour qu'il recompile automatiquement le res à partir du rc
    {$R MonFichier.res} //si tu compiles toi même le rc (a l'aide de brcc32.exe)

  4. #4
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    j'ai pas été assez clair, donc je recommence..!!

    Donc pour plus de compréhension:

    j'ai une application qui utilise plusieurs DLLs entre 10 et 30 en fonction de diverses options, de choix du client ..
    Jusqu’à présent c’est l'application qui interroge toutes les DLLs installées et nous retourne une liste avec le nom des DLL et leur version (utilisé par le S.A.V et support a distance).

    Depuis quelque temps on nous demande de pouvoir connaitre la version de chaque DLL sans passer par l'application. Donc depuis l'explorateur (via les propriétés du fichier (DLL) onglet version).
    Pour faire cela on passe par l'utilitaire de Delphi " Option => informations de version" qui s'occupe de modifier (après la compilation du projet) les informations des fichiers dans la section propriété.

    Mais une erreur c'est produite, l'oublie de traiter la version dans les "Option => informations de version" de delphi qui donnait au client deux versions différentes d'un même fichier.
    Le meilleur moyen d’éviter cela et de n'avoir qu'une seule source de version qui traite les deux cas:
    - La lecture par l'application.
    - La lecture depuis l'explorateur.

    Pour la 1er cas c'est déjà géré via l'application et les DLLs.
    et je cherche a faire le cas n°2, d’où ma demande:

    Existe il un moyen de modifier les informations des fichiers dans leur section propriété / onglet version par programmation et non manuellement.
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  5. #5
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    heu j'ai toujours pas bien saisi
    La technique que je t'ai donné dans mon message précédent te permet d'avoir la même version dans toutes tes dll au moment de la compilation, sans avoir à aller la modifier dans Delphi "Option => informations de version".
    Qu'entend tu par
    Existe il un moyen de modifier les informations des fichiers dans leur section propriété / onglet version par programmation et non manuellement.
    Tu as une dll déjà compilée, et tu veux modifier ses informations de version ? Et tu veux faire cette modification par le code, et non pas avec un éditeur de ressources ?
    Je ne sais pas si il existe une voie officielle, mais tu peux regarder la façon dont fonctionne XN resource editor. le site est ici, mais il n'est plus trop fonctionnel, tu peux trouver les sources ici par exemple.

    Mais je ne suis pas sûr d'avoir bien compris le problème ...

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    A relire ton, message, je me dis que mon premier message est bien ce que tu cherches.
    Une fois mis en place, le fonctionnement est simple :
    • tu modifie le numéro de version dans l'unique fichier rc
    • tu recompile le res à partir de ce rc avec brcc32.exe
    • tu compiles toutes tes dll, elles ont le bon numéro de version

  7. #7
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    heu lol ..

    En effet je pense que l'on se comprends pas là !! mais je dois mal m'expliquer aussi ... lol

    donc un dessin peut etre !

    je désire modifier ce numéro de version par programmation et non via l'utilitaire de Delphi " Option => informations de version"
    Images attachées Images attachées  
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  8. #8
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    ok donc la solution que je te propose fonctionne.
    Tu te fais ton fichier rc, disons version_produit.rc comme il est écrit dans mon premier message
    Ensuite, 2 possibilités : soit tu decides de compiler ce fichier rc à la main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <delphi>\bin\brcc32.exe <chemin>\version_produit.rc <chemin>\version_produit.res
    et tu ajoute cette ligne dans les dpr de tes dll (et de tous les projets qui ont ce numero de version)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$R <chemin>\version_produit.res}
    Soit tu laisses delphi le compiler à chaque fois, dans ce cas il faut mettre cette ligne dans tes dpr (avant les uses il me semble)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    library MaDll1;
     
    {$R '<chemin>\version_produit.res' '<chemin>\version_produit.rc'}
     
    uses 
    ...
    et le tour est joué.
    Ensuite, tu n'as plus qu'à modifier le numéro de version dans le rc, et quand tu recompilera, il sera directement mis à jour

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 097
    Points
    13 097
    Par défaut
    Les deux numéros de version devraient être identiques (propriété ou par code). Le seul cas qui me vienne à l'esprit est si les ressources sont localisées (français et anglais par exemple).

  10. #10
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Les deux numéros de version devraient être identiques (propriété ou par code). Le seul cas qui me vienne à l'esprit est si les ressources sont localisées (français et anglais par exemple).
    Rien ne l'oblige techniquement, tu as 2 numeros de version distincts dans le rc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    FILEVERSION 3,0,0,0
    PRODUCTVERSION 1,0,0,0
    plus 2 autres champs textes libres ProductVersion et FileVersion.

    En ce qui concerne la logique, je ne sais pas trop. Chez nous, on utilise un numéro de version identique, mais rien ne t’empêche, pour un produit en version 2.4.0.0, d'avoir des dlls en 2.4.0.1234

Discussions similaires

  1. [DCU] Gestion de version
    Par Clorish dans le forum Outils
    Réponses: 15
    Dernier message: 16/06/2005, 09h14
  2. [Conseils] Gestion de version Sources / Binaires
    Par Clorish dans le forum Outils
    Réponses: 18
    Dernier message: 09/06/2005, 14h14
  3. Gestion des versions d'objets dans les SGBD
    Par bennus dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 09/05/2005, 12h57
  4. [CVS] Gestion de version d'un projet
    Par Oliveuh dans le forum EDI et Outils pour Java
    Réponses: 5
    Dernier message: 28/03/2005, 23h11
  5. Gestion des versions travail en équipe
    Par yanis97 dans le forum WinDev
    Réponses: 1
    Dernier message: 05/10/2004, 21h18

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