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] Compléter AppVerName avec une variable


Sujet :

Outils Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut [Inno Setup] Compléter AppVerName avec une variable
    Bonjour,

    Je souhaiterais savoir si il est possible, dans le [Setup], de définir AppVerName en fonction de AppVersion et d'une fonction ?
    Car j'utilise un pré-compiler qui va remplir la variable AppVersion, mais je voudrais que la valeur affichée dans la fenêtre de bienvenue de l'installateur soit
    l'AppVersion suivie d'une lettre qui est obtenu à partir d'une clé de registre.

    Quelqu'un peut m'aider ?

    Merci d'avance

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Oui en pré-compilation à l'aide de ReadReg :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AppVerName={#MyAppName} {#MyAppVersion} {#ReadReg(HKEY_LOCAL_MACHINE_64, 'SOFTWARE\MyProg', 'SubVersion')}
    A toi de voir s'il faut accéder à HKEY_LOCAL_MACHINE ou HKEY_LOCAL_MACHINE_64.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Oui j'avais essayé de mettre la variable {#MyAppVersion} mais j'ai un message d'erreur :
    [ISPP] Undeclared identifier: "MyAppVersion"

    Car pour pouvoir utiliser cette variable il faut que je la définisse, or ma AppVersion n'est pas pré-défini, c'est le pré-compiler qui la défini.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Citation Envoyé par Gile67 Voir le message
    ...or ma AppVersion n'est pas pré-défini, c'est le pré-compiler qui la défini.
    Qui la définit où ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    En faite j'ai cette configuration là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ; ------------------------------------------------------------------------------------------
    ; SETUP OPTIONS
    ; ------------------------------------------------------------------------------------------
    [Setup]
    AppName=MyApp
    AppVersion=
    La variable "AppVersion" est rempli par un pré-compiler, seulement je ne veux pas que se soit cette variable qui s'affiche dans la fenêtre du setup mais une autre variable (soit sorti de fonction soit registre)

    Lorsque j'écrit {#AppVersion} j'ai une erreur et je pense que c'est parce que avant je n'ai pas mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define AppVersion x.xx
    Mais je ne peux pas faire ça car je n'ai aucune valeur a lui donner ...

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Le preprocessor peut récupéré les déclarations par SetupSetting. Ce qui donne (avec un complément récupéré depuis la BdR) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [Setup]
    AppName=MyApp
    AppVersion=1.0
    AppVerName={#SetupSetting('AppName'} {#SetupSetting('AppVersion')} {#ReadReg(HKEY_LOCAL_MACHINE_64, 'SOFTWARE\MyApp', 'SubVersion')}
    AppName et AppVersion doivent obligatoirement être renseignés avant AppVerName, le traitement est séquentiel.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Alors sur ma machine ça marche très bien, j'arrive à compiler et la valeur affichée est celle voulu ! Donc merci beaucoup

    Cependant lorsque je lance la compilation avec pré-compilateur et inno setup à l'aide d'un logiciel d'intégration continue, j'ai l'erreur suivant :

    ERROR during Inno Setup Compiling
    Value of [Setup] section directive "AppVerName" is invalid.

    L'erreur vient de la ligne {#ReadReg(HKEY_LOCAL_MACHINE_64, 'SOFTWARE\MyApp', 'SubVersion')}
    sachant que lorsque je lui donne comme valeur une constante la compilation se passe très bien.

    Avez-vous une idée d'ou vient l'erreur ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    As-tu au moins essayé de remplacer HKEY_LOCAL_MACHINE_64 par HKEY_LOCAL_MACHINE ?

    Après, si la clé de registre dépend de la plateforme (32/64), ça devient un peu plus ennuyeux puisque le preprocessor n'intègre pas cette notion :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Setup]
    AppName=MyApp
    AppVersion=1.0
    
    #if GetEnv('ProgramFiles(x86)') != ""
      #define RootKey HKEY_LOCAL_MACHINE_64
    #else
      #define RootKey HKEY_LOCAL_MACHINE
    #endif
    
    AppVerName={#SetupSetting('AppName'} {#SetupSetting('AppVersion')} {#ReadReg(RootKey, 'SOFTWARE\MyApp', 'SubVersion')}

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Oui j'ai utilisé HKEY_LOCAL_MACHINE car c'est une variable que j'utilise a d'autres endroits du code.
    Mais j'ai l'impression que c'est plus la notation #ReadReg qui passe pas.

    Dans mon code j'ai une variable qui correspond exactement à la valeur que je veux afficher.
    Sachant que cette variable est implémenté avant l'affichage de la fenêtre, c'est pas possible de récupérer celle là ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 694
    Points : 13 130
    Points
    13 130
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [Setup]
    AppVerName={code:GetAppVerName}
     
    [Code]
    var
      MyAppName :string;
     
    function GetAppVerName(Param: string) :string;
    begin
      Result := MyAppName;
    end;

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 27
    Points : 15
    Points
    15
    Par défaut
    Cette méthode fonctionne très bien !

    Merci beaucoup

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

Discussions similaires

  1. Rafraichissement avec une variable
    Par niceday dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/08/2005, 10h08
  2. Réponses: 5
    Dernier message: 25/06/2005, 11h35
  3. Réponses: 2
    Dernier message: 14/05/2004, 14h32
  4. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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