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

Outils Delphi Discussion :

[Inno Setup] Problème avec GetFileversion()


Sujet :

Outils Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Points : 6
    Points
    6
    Par défaut [Inno Setup] Problème avec GetFileversion()
    Bonjour à tous!

    J'utilise actuellement le logiciel Inno Setup pour la création de l'installeur d'un projet.

    Je suis, comme le titre du topic l'indique, bloqué par la fonction GetFileVersion().
    En effet, dans la fonction InitializeSetup() j'ai besoin de vérifier les versions de certaines DLL du système afin de les mettres à jour si elles sont trop vieilles. Seulement voila, à la compilation la fonction GetFileVersion() semble ne pas être reconnu car le compilateur se stoppe et me donne l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Column 15: Unknown identifier 'GetFileVersion'
    J'ai donc tenté la fonction GetStringFileInfo() mais le résultat est le même...

    Après avoir effectué plusieures recherches j'ai découvert que ces fonctions étaient définies dans 'Builtins.iss' qui est automatiquement inclu lors de la compilation, et qu'elles nécessitent également la DLL version.dll. Ces deux fichiers sont bien présents sur mon PC, aux bon emplacements.

    Je précise que je travaille sous Windows Vista avec Inno Setup 5.2.0 et ISTool 5.2.0.1.


    C'est assez embêtant dans le sens où cela m'empèche de continuer mon travail, d'autant plus que j'ai l'impression qu'il s'agit d'une errer toute bête...
    Je suis donc à la recherche d'une solution, d'une astuce, d'un conseil donc n'hésitez pas à me répondre si vous avez une piste.

    Bien cordialement,
    Bonne journée à vous.

  2. #2
    T-B
    T-B est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    je te propose çà

    dans ta section Code ajoute les fonctions suivantes :
    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
     
    procedure DecodeVersion(const Version: cardinal; var a, b: word);
    begin
    	a := word(Version shr 16);
    	b := word(Version and not $ffff0000);
    end;
     
    function IsMsiRequiredVersion(madll: string, Req_MajorVersion, Req_MinorVersion: integer): boolean;
    var
    Version, Revision:	cardinal;
    Ret_MajorVersion, Ret_MinorVersion:	word;
    begin
     if FileExists(ExpandConstant(ma.dll) and GetVersionNumbers(ExpandConstant(ma.dll, Version, Revision) then
     begin
       DecodeVersion(Version, Ret_MajorVersion, Ret_MinorVersion);
       if (Ret_MajorVersion >= Req_MajorVersion) and (Ret_MinorVersion >= Req_MinorVersion) then
            Result := True;
      end;
    end;
     
     
    procedure CurStepChanged(CurStep: TSetupStep);
    var
     ResultCode: integer;
    begin
     case CurStep of
      ssInstall:
       begin
       // si le fichier ma.dll n'est pas en version 3.1 on install la mise à jour 
          IF Not IsMsiRequiredVersion('{sys}\madll',3,1) Then
          ........
       END;
      END;
    end;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Ca ne marche pas..
    Alors je viens de tester ce beau script...

    Il ne marche pas DU TOUT !

    Je test la version de system32\msi.dll (qui est 3.1.400...) et quand je teste les valeurs 0 et 1 par exemple.. Et il me renvoie true, comme si de rien était :p

    C'est vraiment une galere Inno Setup...

  4. #4
    T-B
    T-B est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 69
    Points : 58
    Points
    58
    Par défaut
    un bout de code que j'utilise pour tester la version de msiexec.exe



    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
     
     
    [Run]
    Filename: "{tmp}\kb893803.exe"; Parameters: "/quiet /norestart"; Check: InstallKBMsi;
     
    CODE]
    { si la version installé est inféieur à 3.1.4000.1823 }
    MSIVersionMS = (3 shl 16) or 1;
    MSIVersionLS = (4000 shl 16) or 1823;
     
    Function InstallKBMsi: Boolean;
    var
      MS, LS: Cardinal;
    begin
     if not GetVersionNumbers(ExpandConstant('{sys}\msiexec.exe'), MS, LS) then
        Result := True
      else
       if (MSIVersionMS > MS) or
         ((MSIVersionMS = MS) and (MSIVersionLS > LS)) then
        Result := True
       else
        Result := False;
    end;

  5. #5
    Membre régulier
    Consultant informatique
    Inscrit en
    Octobre 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 68

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 240
    Points : 103
    Points
    103
    Par défaut
    Je ne suis pas un expert mais si tu consultes l'aide fournie dans innosetup, tu verras que ces deux fonctions ne sont pas connues par innosetup.
    Par contre "GetVersionNumbersString" est reconnue, ne te convient-elle pas?
    Tu ne dois pas baisser les bras face à ce genre de petit déboire. Tu verras à force de travailler tu apprécieras innosetup! Dis plutôt merci à Jordan Russel pour son freeware de bonne qualité.

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/05/2011, 10h08
  2. [Inno Setup] Problème de lancement de fichier bat avec Java
    Par oliviercotedor dans le forum Outils
    Réponses: 3
    Dernier message: 13/12/2007, 16h27
  3. [inno setup] Probleme avec des fichiers.url et autres
    Par Razorbak dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 13/11/2007, 19h57
  4. [Inno-Setup] Problème sur XP : Run-time error '429'
    Par lucas67 dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 27/07/2007, 08h47
  5. Inno setup, probléme
    Par nightcyborg dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 18/04/2006, 14h47

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