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][VISTA] et fichiers INI


Sujet :

Outils Delphi

  1. #1
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut [Inno Setup][VISTA] et fichiers INI
    Bonjour

    Je cherche un solution simple et efficace permettant d'utiliser un fichier INI dans le répertoire de mon appli comme au bon vieux temps de Win xx et XP.

    Je connais la Base de Registre, oui mais pour certaines manips, par exemple le BackUp ou encore la portabilité ; hé bien, rien ne vaut un bon vieux fichier INI.

    Bref, VISTA est un petit canailloux, il se méfie terriblement des fichiers INI placés dans les dossiers en Program Files !

    Ce petit canailloux de VISTA les isole en les clonants au fin fond d'un dossier système.

    Tout ceci n'est pas très gênant, sauf si le programme doit manipuler ce fameux fichier INI !

    Alors là tout se complique, puisque le contenu de ce fichier est absolument vide.

    CQFD = le contenu de ce fichier INI est cloné au fin fond d'un dossier système dis-je.

    Voici ma demande et l'objet de ce thread : aux développeurs qui possèdent VISTA (étants assez peu nombreux...) ; qu'elle méthode appliqueriez-vous à ce cas de figure.

    Je connais une parade : celle d'installer le programme Hors Program Files, mais pas très propre et pro à mon avis.

    Comment faire pour tout de même installer le programme en Program Files et garder les fichiers INI dans leurs dossiers, au chaud tout auprès de leurs .exe, mais est-ce seulement possible ?

    Une astuce, une parade ?

    Merci de vos conseils

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Ajouter des droits d'écriture sur le dossier de l'application, normalement ça suffit. (mais je n'ai plus de vista en état de marche sous la main pour vérifier).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Pour faire ça, la méthode compliant Billou est de ne plus écrire le fichier INI dans le répertoire d'installation mais dans le répertoire de l'utilisateur en cours (le genre C:\Documents and Settings\userxxx\Application Data sous XP).

    Pour ça je penses que la lecture du tutorial sur le famous UAC de Vista te sera instructive ici.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    @ Linkin, si tu pouvais stp me donner des compléments détaillés, ce serait sympa.

    @ Aka Guymelef : oui oui et en plus il est super ton lien, là je commence à piger pas mal de choses. Je vais approfondir ça ce we.

    Ce fameux fichier .manifest, cette fois je saurais de quoi il s'agit, ce n'est pas un gadget.

    En attendant que je teste les éléments intéressants et très instructifs de cet article à tête reposée ce we, et espérant taguer en "Résolu" ce thread ; si vous avez d'autres infos et détails, je ne dis pas non et suis toutes ouies


  5. #5
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il me semble que par défaut le dossier Program Files est en lecture seule (au niveau droit, pas au niveau attribut).

    Je n'ai rajouté que des droits "à la main" (par le gestionanire de windows), pas par programmation.

    Mais Aka Guymelef a raison, il faudrait le mettre dans Application Data etc ...
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut


    Oki, oki, je me dirige donc vers la méthode de l'installation en Program Files du programme et des données perso qui seront stockées dans un INI en ... AppData\...

    Oui mais, quelle est la bonne méthode à adopter afin que chaque utilisateur possède un dossier de données perso en C:\Users\Toto\AppData\Roaming ?

    En section [code ] d'Inno Setup, j'ajoute quelques lignes afin de détecter si ce dossier existe déjà et si non ; le créer ?

    Ou bien à chaque lancement de l'exe du programme installé, un test si ce dossier existe déjà... ?

    Merci d'avance de vos réponses ; malgré mes recherches, je n'ai pas trouvé grand-chose à ce sujet

    Suis-je sur le bon chemin

  7. #7
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep, Droïde ! (le retour du Jedi, )

    Alors de mon côté j'ai utilisé le code mis plus bas pour obtenir les résultats suivants ("root" c'est ma pomme et mon nom de user (Administrateur) sur w2k, "papa" c'est un user lambda sous Vista, et "Jérémie" c'est mon fils sur sa babasse) [je mets en "code" pour l'alignement]:
    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
    --- 2K :
    %userprofile%  = E:\Documents and Settings\root
    %appdata%      = E:\Documents and Settings\root\Application Data
    %localappdata% = %localappdata%
    %public%       = %public%
    --- Vista :
    %userprofile%  = D:\Users\papa
    %appdata%      = D:\Users\papa\AppData\Roaming
    %localappdata% = D:\Users\papa\AppData\Local
    %public%       = D:\Users\Public
    --- XP :
    %userprofile%  = C:\Documents and Settings\Jérémie
    %appdata%      = C:\Documents and Settings\Jérémie\Application Data
    %localappdata% = %localappdata%
    %public%       = %public%
    Et tout ça juste avec ça, pas plus :
    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
    function ExpandEnvironment(const strValue: string): string;
    var
      chrResult: array[0..1023] of Char;
      wrdReturn: DWORD;
    begin
      wrdReturn := ExpandEnvironmentStrings(PChar(strValue), chrResult, 1024);
      if wrdReturn = 0 then
        Result := strValue
      else
      begin
        Result := Trim(chrResult);
      end;
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      memo1.Clear;
      memo1.Lines.Add('%userprofile%  = ' + ExpandEnvironment('%userprofile%'));
      memo1.Lines.Add('%appdata%      = ' + ExpandEnvironment('%appdata%'));
      memo1.Lines.Add('%localappdata% = ' + ExpandEnvironment('%localappdata%'));
      memo1.Lines.Add('%public%       = ' + ExpandEnvironment('%public%'));
    end;
    Y a plus qu'à parser, pas encore eu le temps de le faire.

    HTH,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Yep jp tu me manquais aussi,

    Là, je ne sais plus oú donner de la tête, tu me donnes du super code mais pour l'instant j'y trave que dalle de chez que dalle quant à savoir à quel endroit je dois l'ajouter. Mais à cette heure, mes yeux ne sont plus grands ouverts.

    A première vue, ce n'est pas à mettre en [ code] de Inno Setup car ça ne correspond pas aux variables de ce dernier

    J'étais justement en train de tester certaines de ses variables, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lbl.Caption := ExpandConstant('{userappdata}');
    Mais ça renvoie l'user de l'administrateur et non l'user de l'utilisateur standard, endroit pourtant d'oú je lance ce setup d'Inno

    VISTA, pourquoi es-tu venu ? avant c'était si simple !

    J'espère que désormais, nous ne devons pas donner une version pour les Win xx, une autre pour les XP, une autre pour les Vista.

    Ce serait super une méthode simple qui permette l'installation sur tous les nonos sans se prendre le choux. Mais c'est peut-être ça que tu me proposes.

    jp et

    @+

  9. #9
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    jp, grâce à toi et à un moment de pensée transcendantale une lueur m'est venue :

    1. En fin d'install via Inno Setup et en section [Run] j'ajoute dans le dossier courant de l'install en Program Files un autre fichier exe.
    Cet autre fichier exe sera exclusivement destiné à vérifier si le dossier spécial de cette install en "C:\Users\Toto\AppData\Roaming\MyAppli" est déjà créé.
    Si oui cet exe s'autokill, sinon il créé ce dossier dito.

    2. Lors de l'exploitation du programme, bien entendu, toute écriture sera dirigée directo vers ce dossier spécial de données perso.

    Bribe de code pompé en ce forum :
    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
    function SpecialFolder(Folder: Integer): String;
    var
      SFolder : pItemIDList;
      SpecialPath : Array[0..MAX_PATH] Of Char;
    begin
      SHGetSpecialFolderLocation(Form1.Handle, Folder, SFolder);
      SHGetPathFromIDList(SFolder, SpecialPath);
      Result := StrPas(SpecialPath);
    end;
     
    procedure TForm1.Button7Click(Sender: TObject);
    begin
      //MyLabel.Caption := SpecialFolder(CSIDL_APPDATA);
      ShowMessage(SpecialFolder(CSIDL_APPDATA));
    end;
    sur la bonne piste il me semble, mais il existe peut-être mieux en méthode ?

    Demain je regarde ça de très près et testerai sur Windows 98se (j'ai pas de XP...)

    jp, ai-je trahi ta pensée ?

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Io !
    A première vue, ce n'est pas à mettre en [ code] de Inno Setup
    Ah, j'avais pas vu ça à la première lecture,
    Et surtout, mon idée à moi (pour mes projets), c'est de faire créer l'ini par le prog. lors du first run. Et lui, il est parfaitement capable de détecter où il doit l'écrire.
    Le pb c'est en cas de désinstall par Inno : s'il n'installe pas le .ini il le désinstallera pas, si j'ai bien compris le truc.
    À moins qu'il y ait un flag style "force all" ?
    T'aurais dû poster dans Outils (Inno Setup, GExperts, CVS...),
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Yep jp

    Tu disais :
    [...] Le pb c'est en cas de désinstall par Inno : s'il n'installe pas le .ini il le désinstallera pas, si j'ai bien compris le truc. [...]
    Tu as parfaitement percuté

    Vi vi, tu as raison en cas de désinstall, le dossier perso en "C:\Users\Toto\AppData\Roaming\MyAppli" ne sera pas killé.

    Enfin j'ai pas encore approfondi de ce côté précis...

    Mais dis-moi, quel développeur ne s'est pas fait engu[censuré] à la suite d'une désinstall pourtant volontaire et réfléchie[?] d'utilisateurs ?

    A penser que des fois, certains utilisateurs ne regardent même pas les messages d'informations et d'avertissements lors du moment de désisntall

    Tant que la BdR n'est pas souillée, telle est ma philo.

    Je suis très très étonné - pour l'instant - de ne trouver aucune info concernant ce problème d'installer correctement son appli en {pf} et les données perso d'écritures dans un dossier spécial utilisateur, bien à part donc des {pf}.

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Io !
    Citation Envoyé par Droïde Système7 Voir le message
    Mais dis-moi, quel développeur ne s'est pas fait engu[censuré] à la suite d'une désinstall pourtant volontaire et réfléchie[?] d'utilisateurs ?

    A penser que des fois, certains utilisateurs ne regardent même pas les messages d'informations et d'avertissements lors du moment de désisntall

    Tant que la BdR n'est pas souillée, telle est ma philo.
    1er point : pas compris ce que tu voulais dire : si un utilisateur désinstalle, il va ensuite engueuler (j'censure rien, moi, ) le développeur ?
    2e point : là ch'suis d'accord, c'est vrai qu'on voit des trucs, des fois... (j'fais de la hotline système et application-métier dans une ssii).
    3e point : d'accord aussi.

    Réflexion globale : j'ai comme l'impression que tu mélanges 2 trucs, la problématique de l'installation par IS (que ça fait longtemps que j'ai pas joué avec, que je suis pas allé explorer les tréfonds de toutes ses sous-options et que j'ai pas la dernière version, ) et les histoires d'install/désisntall par JoeLeUser.
    Pas trop le temps de philosopher là-dessus, j'ai un w-e chargé...
    Tchô,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re yop jp,

    1er point : pas compris ce que tu voulais dire : si un utilisateur désinstalle, il va ensuite engueuler (j'censure rien, moi,) le développeur ?
    Hé oui, tu sais le style du bouton "Ne pas toucher", toujours des curieux ou étourdis pour cliquer dessus.

    Question désinstall c'est pareil, pourtant clair qu'une désinstall c'est une désinstall, oui mais pas pour tout le monde

    Aller, bon w-e chargé alors.

    Il faut que je commence sérieusement à tester des trucs...




    Edit : j'ai commencé...


    Voici un premier jet du principe : en [Run] de Inno Setup, lancer un exe (autre que l'appli) gèrant la création du dossier de données perso de l'user en cours.

    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
     
    ...
      // uses Shlobj
    function SpecialFolder(Folder: Integer): String;
    var
      SFolder : pItemIDList;
      SpecialPath : Array[0..MAX_PATH] Of Char;
    begin
      SHGetSpecialFolderLocation(UserData.Handle, Folder, SFolder);
      SHGetPathFromIDList(SFolder, SpecialPath);
      Result := StrPas(SpecialPath);
    end;
     
      // Cible de création ==> "C:\Users\NameUser\AppData\Roaming\MyProgr"
    procedure TUserData.Button1Click(Sender: TObject);
    var
      PathUser: String;
    begin
      PathUser := SpecialFolder(CSIDL_APPDATA);
      if not DirectoryExists(PathUser + '\MyProgr') then
      if not CreateDir(PathUser + '\MyProgr') then
        raise Exception.Create('Création échouée méthode "SpecialFolder(CSIDL_APPDATA\MyProgr)"');
    end;
     
    ...
    N'hésitez pas à poster si vous avez une meilleure idée ou principe




    Re Edit :


    jp, tu disais aussi :
    Le pb c'est en cas de désinstall par Inno : s'il n'installe pas le .ini il le désinstallera pas, si j'ai bien compris le truc.
    Vi vi, mais là je viens d'appronfondir via ISTool et il existe bel et bien une super possibilité en section
    Voir capture jointe.

    @+

  14. #14
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut En cours de tests...
    Bonjour

    Hier j'ai bien passé plus d'une heure à tenter de m'expliquer l'inexplicable.

    Pourquoi un .exe fonctionne impec en cliquant directo dessus, et non en passant par une installation via Inno Setup.

    Je vous redonne ici le code (placé plus haut) de l'exe que IS lance :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    ...
     
      // uses Shlobj
    function SpecialFolder(Folder: Integer): String;
    var
      SFolder : pItemIDList;
      SpecialPath : Array[0..MAX_PATH] Of Char;
    begin
      SHGetSpecialFolderLocation(UserDataG.Handle, Folder, SFolder);
      SHGetPathFromIDList(SFolder, SpecialPath);
      Result := StrPas(SpecialPath);
    end;
     
      // Cible de création ==> "C:\Users\NameUser\AppData\Roaming\MonProgramme"
    procedure TUserDataG.FormCreate(Sender: TObject);
    //var
    //  PathUser: String;
    begin
    {
      Application.ShowMainForm := False; // Form invisible
      PathUser := SpecialFolder(CSIDL_APPDATA);
      if not DirectoryExists(PathUser + '\MonProgramme') then
      if not CreateDir(PathUser + '\MonProgramme') then
        raise Exception.Create('Création échouée méthode "SpecialFolder(CSIDL_APPDATA\MonProgramme)"');
     
      ShowMessage('Salut !');
     
      //Close; avec ça, l'appli ne se ferme pas totalement selon le compilo
      Application.Terminate;
     } 
    end;
     
     
    procedure TUserDataG.Button1Click(Sender: TObject);
    var
      PathUser: String;
    begin
      PathUser := SpecialFolder(CSIDL_APPDATA);
      if not DirectoryExists(PathUser + '\MonProgramme') then
      if not CreateDir(PathUser + '\MonProgramme') then
        raise Exception.Create('Création échouée méthode "SpecialFolder(CSIDL_APPDATA\MonProgramme)"');
     
      ShowMessage('Salut !');
     
      Close;
     
    end;
     
    ...
    Et le code hyper basic de principe de Inno Setup simplement pour tester la création d'un dossier en "C:\Users\NameUser\AppData\Roaming\MonProgramme" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Setup]
    AppName=MonProgramme
    AppVerName=MonProgramme version 4.0.0
    DefaultDirName=C:\MonDossier\MonProgramme
    SourceDir=C:\Users\Toto\Documents\Delphi\Prep_Instal_G\StockInstal_G
    OutputBaseFilename=Install_Gr
    OutputDir=C:\Users\MyName\Documents\Delphi\Prep_Instal_G
     
    [Files]
    Source: Datag.exe; DestDir: {app}; Flags: deleteafterinstall; Tasks: 
     
    [Run]
    Filename: {app}\Datag.exe
    Je n'ai toujours pas compris pourquoi je n'arrive pas à créer le dossier en question en passant par Inno Setup, alors que d'un simple clic sur l'exe, ça fonctionne parfaitement.

    Surtout que pour les besoins de revérifier que cet exe était bien lancé ; j'ai bien à cliquer sur le bouton de l'appli lancée !!! J'ai aussi le ShowMessage !!! Mais pas la création de mon fameux dossier

    Merci de vos idées, car c'est un truc à rendre chèvre

    PS : Fiez-vous pas de trop au code par lui-même, mais au principe ; car j'ai remanié/simplifié ce code...

  15. #15
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Bonjour,

    Simplement pour dire que j'e viens de tester le lancement de ce même .exe, mais cette fois à partir d'un autre installeur (non gratuit) et devinez...

    Pareil !!!

    Incroyable mais vrai : lors des install, le ShowMessage arrive, je clique sur le bouton et en allant vérifier si ce dossier est créé = niet !

    Tandis-que si je clique directo sur l'exe, ensuite sur le bouton = oui ça crée le dossier.

    Pourquoi "l'interfaçage" des installeurs empêche la création du dossier ?



    Un grand merci au petit fûté qui saura m'en donner la raison

  16. #16
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Pourquoi "l'interfaçage" des installeurs empêche la création du dossier ?
    Peut-être (je dis bien « peut-être », je n'ai pas de Vista sous la main, donc rien pour tester) parce que tu mets en dur en string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SourceDir=C:\Users\Toto\Documents\...
    et j'ai remarqué soit dans l'explorateur soit ailleurs (me rappelle plus) qu'on pouvait trouver "C:\Utilisateurs", ie une traduction.
    Est-ce que c'est cette traduction et/ou le chemin en dur qui fout la grouille ? Car dans l'exe tu utilises le SHGetSpecialFolderLocation.
    Fais donc un 'tit exe de test où tu essayes de créer ton dossier à partir d'une chaine en dur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TUserDataG.Button1Click(Sender: TObject);
    var
      PathUser: String;
    begin
      PathUser := 'C:\Users\Toto\Documents\Delphi\...';
      if not DirectoryExists(PathUser + '\MonProgramme') then
      if not CreateDir(PathUser + '\MonProgramme') then
        raise Exception.Create('Création échouée méthode "SpecialFolder(CSIDL_APPDATA\MonProgramme)"');
     
      ShowMessage('Salut !');
     
      Close;
     
    end;
    Et dis-nous.
    Dis-nous aussi d'où sort cette capture d'écran : c'est une version récente d'IS ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  17. #17
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Yep jp

    Je vais bidouiller ton idée...

    En attendant :
    Et dis-nous.
    Dis-nous aussi d'où sort cette capture d'écran : c'est une version récente d'IS ?
    Niet = dernière version ISTool outil et compagnon indispensable de IS !

    @+

    ======================================

    Edit :
    Après cette modif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PathUser := 'C:\Users\MyName\AppData\Roaming'; //SpecialFolder(CSIDL_APPDATA);
    ---------------------------
    Datauserg
    ---------------------------
    Création échouée méthode "SpecialFolder(CSIDL_APPDATA\MonProgramme)"
    ---------------------------
    OK
    ---------------------------
    Encore un truc à se les... [censuré]

    Surtout que toujours ensuite, afin de vérifier la validité de l'exe, je vais cliquer directo sur l'exe, je ensuite clique sur le bouton exe lancé (comme lors d'une install), mais là ça créé bien ce dossier !

    (Je suis loggué en utilisateur standard, et suis obligé pour aller vérifier si ce dossier à été créé ou non, passer à chaque fois dans un autre compte ; celui de l'admin)

  18. #18
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    dernière version ISTool outil et compagnon indispensable de IS !
    Oki, j'connaissais pas (pour le peu que j'utilise IS...)


    Bon, si tu te prends ton message d'erreur, c'est qu'il y en a une (bravo, Mister de La Palice ! ) :
    • Essaye C:\Utilisateurs\...
    • Problème de droits ? Je penche plutôt pour ça (« Je suis loggué en utilisateur standard »), hélas, (mais j'peux m'gourrer...)

    À +,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  19. #19
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re jp,

    Idem en mettant "C:\Utilisateurs\..." ; ça foire en raise Exception.Create

    Curieux que personne d'autre ne sait, enfin attendons.

    J'ai aussi la solution d'ajouter directo sur mon programme (en Create ou Show) une condition au lancement (enfin... à chaque lancement) = if dossier not créé = le créer... Mais un peu crade !

    Tu évoquais qu'il puisse peut-être s'agir d'un blème de droits ; pas impossible, justement là je me suis... avec un vulgaire fichier .bat. Figure-toi que l'UAC, la petite canaille masque certaines données ; une variable en l'occurrence...

    @+

    de tes efforts, il n'est pas interdit aux autres camarades programmeurs de répondre

    Edit : Un autre camarade :
    http://www.developpez.net/forums/sho...d.php?t=516050


    ReEdit :
    Ce soir en prenant du recul, je pensais à une autre piste qui serait certainement plus douce et moins lourde - sans exe de création de dossier - à mettre en oeuvre ; simplement de déplacer ce dossier...
    Ce dernier serait bien entendu stoché dans le dossier de stockage de tout les fichiers et dossiers de l'apli, je vais approfondir cette piste
    En plus je viens de mettre le nez dans l'aide de IS, surtout au niveau de "Pascal Scripting > Support functions reference"

  20. #20
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yep !
    Vit' fait avant d'aller au taf :
    Citation Envoyé par Droïde Système7 Voir le message
    J'ai aussi la solution d'ajouter directo sur mon programme (en Create ou Show) une condition au lancement (enfin... à chaque lancement) = if dossier not créé = le créer... Mais un peu crade !
    En Create, en Create ! Show n'est pas là pour ça !
    Et pourquoi donc, « un peu crade » ? Je suis un programme, le pinpin qui tient la souris vient de double-cliquer sur mon icône, je me pose deux questions existentielles :
    1. où suis-je ?
    2. y a-t-il un fichier ini pour m'accompagner me paramétrer ? Si oui je le lis si non je me le crée et zou !

    Je t'accorde qu'on est loin de IS (t'aurais p'têt' dû laisser le post en Langage, )
    Bonne gamberge,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Inno Setup] : modifier un fichier ini
    Par Mimie37 dans le forum Outils
    Réponses: 0
    Dernier message: 30/07/2014, 18h05
  2. Réponses: 4
    Dernier message: 19/03/2009, 11h35
  3. Réponses: 9
    Dernier message: 22/01/2009, 20h54
  4. Inno Setup: Installer certains fichiers suivant le choix de l'utilisateur
    Par remfleyf dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 17/12/2008, 10h55
  5. [Inno Setup] Renommer un fichier durant l'install
    Par freud dans le forum Outils
    Réponses: 2
    Dernier message: 17/09/2008, 21h49

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