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 et lecture dans un fichier .ini mis dans le AppData local


Sujet :

Outils Delphi

  1. #1
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut Inno Setup et lecture dans un fichier .ini mis dans le AppData local
    Bonjour à tous,

    J'ai mis le paramétrage de mon logiciel dans un fichier .ini et ce fichier se trouve dans un sous dossier dans le ProgramData local
    (C:\Users\User_Name\AppData\Local\Dossier\fichier.ini) - j'utiliser la commande GetSpecialFolderPath(CSIDL_LOCAL_APPDATA) dans le logiciel pour gérer l'emplacement de ce fichier (qui semblerait correspondre à {localappdata} de Inno Setup)
    Lors de la mise à jour, je souhaiterai que ce logiciel vérifie que le fichier.ini est bien présent et si oui qu'il aille rechercher une clé dans le fichier.

    J'ai essayé de mettre un bout de code (en delphi pour rester simple) mais bon ... il n'en a pas voulu (prévisible)
    J'ai essayé de "bricoler" avec divers tutos ... mais rien et ma connaissance d'Inno Setup est très très limitée.

    Est ce que l'un d'entre vous aurait la gentillesse de me donner un coup de main ?
    En vous remerciant d'avance
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Passe par les fonctions IniKeyExists et GetIniString (GetIniInt, etc.).

  3. #3
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    Bon, j'ai mis la main dans le cambouis ...
    J'ai commencé par simple: l'idée est de commencer par tester si le fichier existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //section Code d'Inno Setup
     
    procedure InitializeWizard;
    begin
      if FileExists({localappdata}'\CRG software\COMPTABILITE.ini')
      then begin
          ...//...
      end;
    end;
    'SYNTAX ERROR!' ... et ben je n'arrive même pas à voir si le fichier existe ça commence mal.

    J'ai voulu plus simple : simplement afficher le répertoire AppData local (le code est mis avant le if then)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox({app}, mbInformation, MB_OK);
    'SYNTAX ERROR!' ...et ben ... on ne peux pas afficher ce type de constante ?

    AU SECOUUUUR! Quelqu'un peut me mettre sur la voie ?
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Ce sont des chaînes qui doivent être interprétées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ExpandConstant('{localappdata}\CRG software\COMPTABILITE.ini')
    {app} est le répertoire d'installation.

  5. #5
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    OK Andnotor, j'ai corrigé.
    Bon, je viens de m’apercevoir que mon fichier .ini n'en est pas un, c'est un fichier qu'il faut que je balaie pour trouver chaine = valeur
    Pas de assignfile, while eof() ...
    Bon a LoadStringsFromFile, FileOpen, FileRead, FileEof
    Pfff, je rââââmeeeuuuu
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

  6. #6
    Membre régulier

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 185
    Points : 119
    Points
    119
    Par défaut
    Voilà, j'ai trouvé!
    Reprenons le contexte pour ceux qui seraient dans un cas similaire :
    Je souhaite, lors de l'installation de mon logiciel, vérifier s'il existe déjà un dossier d'installation. Cette info se trouve dans un fichier de paramétrage mis dans le appdata local du PC.
    Si l'information existe, la mettre à la place du DefaultDirName.
    Ce fichier paramétrage est sous la forme chaine=valeur et pour le dossier d'installation la chaine est DirInstall=

    donc le code que j'ai trouvé à mettre dans une section [CODE] d'Inno Setup :
    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
     
    procedure InitializeWizard;
    var
      FileLines: TArrayOfString;
      FileName:String;
      I:Integer;
    begin
      FileName:=expandConstant('{localappdata}\Fichier_parametre');
     
      if FileExists(FileName)
      then begin
        if LoadStringsFromFile(FileName, FileLines) then
        begin
          for I := 0 to GetArrayLength(FileLines) - 1 do
          begin
            FileLines[I] := TrimLeft(FileLines[I]);
            if Pos(Lowercase('dirinstall='), FileLines[I]) > 0 then
            begin
              WizardForm.DirEdit.Text:=Copy(FileLines[I], pos('=',FileLines[I])+1,Length(FileLines[I]));
              Break;
            end;
          end;
        end;   
      end; 
    end;
    on peut améliorer en testant si le résultat de copy n'est pas vide

    Si c’était à refaire, le plus simple serait de travailler directement avec un vrai fichier.ini, le code serait plus allégé

    Il me reste encore beaucoup de chose à comprendre sur Inno Setup qui est vraiment puissant.
    Merci Andnotor pour les coups de rame qui permettent de se remettre sur le droit chemin.
    Delphi 10.4.1 - Lazarus
    Utilisation de la VCL

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par patrice@ Voir le message
    Ce fichier paramétrage est sous la forme chaine=valeur
    Donc des paires, il ne serait pas plus aisé d'utiliser un TStringList pour le code ?

    Quelque chose comme ( écrit à la volée donc non testé) :
    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
    procedure InitializeWizard;
    var
      FileLines: TStringList;
      FileName:String;
      I:Integer;
    begin
      FileName:=expandConstant('{localappdata}\Fichier_parametre');
     
      if FileExists(FileName)
      then begin
        FileLines:=TStringList.Create;
        try
          FileLines.LoadFromFile(FileName);
          FileLines.Sort;
          FileLines.Find('dirinstall',i);
          if i>0 then WizardForm.DirEdit.Text:=FileLines.Values[i]; 
       finally 
         FileLines.Free;
      end;
    end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Ça n'est pas utile à moins que l'app ne soit pas désinstallable. Inno Setup reprend automatiquement le chemin précédent depuis la base des registres HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AppId_is1.

    S'il y a plusieurs installateurs, il faut simplement s'assurer qu'ils ont le même AppId.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/11/2015, 12h07
  2. Réponses: 2
    Dernier message: 18/09/2014, 16h35
  3. Réponses: 1
    Dernier message: 24/08/2013, 20h50
  4. Réponses: 2
    Dernier message: 06/03/2012, 09h11
  5. Lecture et ecriture fichier .ini
    Par despe dans le forum C
    Réponses: 6
    Dernier message: 23/07/2003, 20h40

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