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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 : 222
    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

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

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

  3. #3
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 : 222
    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 ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    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 éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 : 222
    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

  6. #6
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 : 222
    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.

+ 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