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] Attendre la fin d'une installation avant de pouvoir quitter le setup


Sujet :

Outils Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut [Inno Setup] Attendre la fin d'une installation avant de pouvoir quitter le setup
    Bonjour,
    Je réalise un install avec Inno Setup. Cette install contient un autre install (dont IS ne voit q’un exe)
    Je voudrais savoir s’il est possible d’attendre la fin de l’installation du deuxième setup avant de POUVOIR valider (par « terminer ») le setup créé par IS.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Run]
    Filename: {tmp}\setup.exe
    Filename: {app}\MonAppli.exe; Flags: unchecked waituntilidle skipifsilent postinstall; WorkingDir: {app}; Description: {cm:LaunchProgram, MonAppli }
    Ceci ne fonctionne pas !
    Je voudrais savoir s’il serait possible de passer par une variable interne à IS. J’ai aussi essayé les étapes de « CurStep » mais cela ne fonctionne pas non plus.
    Je suis prêt à créer une tâche (mais je ne sais pas faire de tâche sous IS), ou à mettre une autre page d’install (page d’attente pendant laquelle on lancerai l’autre setup).

    Avez-vous des idées s’il vous plait ?
    Merci
    Xpmich

  2. #2
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Supprime ton waituntilidle !!

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Merci de la réponse mais ce n'est pas cela.
    waituntilidle = "Attendre une action de l'utilisateur"
    Problème : L'autre install demande des actions à l'utilisateur

  4. #4
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Il se passe quoi quand tu le supprimes ?

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    il attend une action de l'utilisateur. Cette action correspond à "next" de mon 2ème setup.
    Pour comprendre de quel setup il s'agit, Cf cette discussion

  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Citation Envoyé par xpmich
    Je voudrais savoir s’il est possible d’attendre la fin de l’installation du deuxième setup...
    Je replacerais simplement le waituntilidle par waituntilterminated

    Citation Envoyé par Aide Inno Setup
    waituntilidle
    If this flag is specified, it will wait until the process is waiting for user input with no input pending, instead of waiting for the process to terminate. (This calls the WaitForInputIdle Win32 function.) Cannot be combined with nowait or waituntilterminated.

    waituntilterminated
    If this flag is specified, it will wait until the process has completely terminated. Note that this is the default behavior (i.e. you don't need to specify this flag) unless you're using shellexec flag, in which case you do need to specify this flag if you want it to wait. Cannot be combined with nowait or waituntilidle.
    @+ Claudius

  7. #7
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut



    Je replacerais simplement le waituntilidle par waituntilterminated



    @+ Claudius
    Il est implicite le waituntilterminated non ??

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Désolé Claudius mais cette option n'as aucun effet.
    Je reformule mon souhait (voir avec l'image):
    Avoir une install (1) qui ne peut se terminer que lorsque l'install (2) (un simple exe au yeux d'IS) se termine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [Run]
    Filename: {tmp}\setup.exe
    Filename: {app}\MonInstallIS.exe; Flags: unchecked waituntilterminated skipifsilent postinstall; WorkingDir: {app}; Description: {cm:LaunchProgram,MonInstallIS}

    ca devient prise de tête
    Merci d'avance

    PS : Le waituntilterminated est implicite, comme indiqué dans la doc IS que tu cite :
    in which case you do need to specify this flag if you want it to wait
    Xpmich
    Images attachées Images attachées  

  9. #9
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    salut, moi je gère sa avec:
    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
     
    [Files]
    // -------------------------------------------------------------
    // -- files only for installer (not installed)
    // -------------------------------------------------------------
    Source: "avisynth\avisynth255install.exe"; DestDir: "{tmp}"; Flags: dontcopy sortfilesbyextension
     
    [code\]
    procedure CurPageChanged(CurPage: Integer);
    begin
      if CurPage = wpWelcome then
      begin
    //je verifie si il faut installer le logiciel supplémentaire et si oui je lance sa:
           if not FileExists(avisynth255) then
           ExtractTemporaryFile(ExtractFileName(avisynth255));
           Exec(avisynth255,'','',SW_SHOW,ewWaitUntilTerminated,nCode)
    end;
    moi c'est sur la page welcome mais si tu remplace wpWelcome par wpFinish sa devrait etre bon

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    Bonjour,
    Le problème n'est pas là car de toute façon il faut que je l'installe.
    Le problème est que le bouton "terminé" est actif et que si l'utilisateur clique dessus alors qu'il n'as pas fini d'installer le deuxième setup, Inno Setup efface les fichiers temporaires et donc le deuxième setup plante en l'absence de ces fichiers.

    Je galère et ça m'énerve.
    Merci de votre aide.
    Xpmich

  11. #11
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    avec le code que j'ai mis, soit tu cache la fenêtre lance executable et réaffiche après

    soit toujours avec le même code tu met une variable global à false, désactive le bouton terminer
    tu lance l'executable
    et après tu met la variable global à true et réactive le bouton terminer
    et tu te sert de:
    TCloseQueryEvent = procedure(Sender: TObject; var CanClose: Boolean);
    et tu affecte à CanClose ta variable global.

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2008
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 81
    Points : 61
    Points
    61
    Par défaut
    je ne comprend pas l'utilisation de la procédure.
    peut tu me donner un exemple (désolé mais dans l'aide d'inno setup, il montre seulement la déclaration de ces fonctions )
    merci d'avance.

  13. #13
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    984
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 984
    Points : 1 419
    Points
    1 419
    Par défaut
    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
     
    [Files]
    // -------------------------------------------------------------
    // -- files only for installer (not installed)
    // -------------------------------------------------------------
    Source: "avisynth\avisynth255install.exe"; DestDir: "{tmp}"; Flags: dontcopy sortfilesbyextension
     
    [code\]
    var
      CloseReady: Boolean;
     
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      CanClose := CloseReady;
    end;
     
    procedure CurPageChanged(CurPage: Integer);
    begin
      if CurPage = wpFinished then
      begin
        CloseReady := True;
        WizardForm.OnCloseQuery := @FormCloseQuery;
    //  je verifie si il faut installer le logiciel supplémentaire et si oui je lance sa:
    //    if not found file or registry key then
    //    begin
          avisynth255 := ExpandConstant('{tmp}\avisynth255install.exe');
          CloseReady := False;
          //desactiver bouton terminer
          if not FileExists(avisynth255) then
            ExtractTemporaryFile(ExtractFileName(avisynth255));
          Exec(avisynth255,'','',SW_SHOW,ewWaitUntilTerminated,nCode);
          CloseReady := True;
          //activer bouton terminer
    //    end;
      end;
    end;
    tu as encore du travail,
    vérifier si besoin de l'installer
    gérer bouton terminer

Discussions similaires

  1. [PostgreSQL] Attendre la fin d'une requête avant de continuer le code
    Par renardchan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/06/2011, 10h55
  2. Attendre la fin d'une fonction avant d'en executer une autre
    Par FluidBlow dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/07/2009, 21h46
  3. Réponses: 12
    Dernier message: 09/07/2009, 18h12
  4. Réponses: 3
    Dernier message: 21/12/2007, 14h10
  5. Réponses: 2
    Dernier message: 17/07/2007, 13h57

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