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

  1. #1
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 104
    Points : 86
    Points
    86
    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.2 - Lazarus
    Utilisation de la VCL
    "Un expert ne l'est que dans son domaine, dans un autre, il sera débutant. Et j'ai côtoyé beaucoup d'expert!"

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 091
    Points : 11 132
    Points
    11 132
    Par défaut
    Passe par les fonctions IniKeyExists et GetIniString (GetIniInt, etc.).

  3. #3
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 104
    Points : 86
    Points
    86
    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.2 - Lazarus
    Utilisation de la VCL
    "Un expert ne l'est que dans son domaine, dans un autre, il sera débutant. Et j'ai côtoyé beaucoup d'expert!"

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 091
    Points : 11 132
    Points
    11 132
    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
    Inscrit en
    mai 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 104
    Points : 86
    Points
    86
    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.2 - Lazarus
    Utilisation de la VCL
    "Un expert ne l'est que dans son domaine, dans un autre, il sera débutant. Et j'ai côtoyé beaucoup d'expert!"

  6. #6
    Membre régulier

    Homme Profil pro
    Inscrit en
    mai 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2003
    Messages : 104
    Points : 86
    Points
    86
    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.2 - Lazarus
    Utilisation de la VCL
    "Un expert ne l'est que dans son domaine, dans un autre, il sera débutant. Et j'ai côtoyé beaucoup d'expert!"

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    12 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 12 603
    Points : 34 024
    Points
    34 024
    Billets dans le blog
    49
    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;
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  8. #8
    Rédacteur/Modérateur
    Avatar de Andnotor
    Profil pro
    Inscrit en
    septembre 2008
    Messages
    5 091
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : septembre 2008
    Messages : 5 091
    Points : 11 132
    Points
    11 132
    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