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

 Delphi Discussion :

Attendre qu'un setup se termine pour lancer le suivant


Sujet :

Delphi

  1. #1
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut Attendre qu'un setup se termine pour lancer le suivant
    Bonjour à tous;
    Je me suis fais une petite appli qui lance mes setups pour installer tous mes drivers sur mon PC, ainsi que mon antivirus.
    J'utilise la procédure suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Installer_PilotesClick(Sender: TObject);
    var
      StartInfo : TStartupInfo;
      ProcessInformation : TProcessInformation;
      ProcessInfo    : TProcessInformation;
    begin
    ZeroMemory(@StartInfo, sizeof(StartInfo));
    StartInfo.cb:=sizeof(StartInfo);
    if CreateProcess(nil,PChar(ExtractFilePath(Application.Exename)+'Drivers\Setup.exe'),nil,nil, True,0,nil,nil,StartInfo,ProcessInformation) Then
      WaitForSingleObject(ProcessInformation.hProcess, INFINITE);
      CloseHandle(ProcessInfo.hProcess);
    end;
    ... puis je passes au setup suivant, avec la même procédure.
    C'est pas trop mal au début, mais, une appli ne s'affiche pas au premier plan, car ma form est en plein écran, donc, se qui fait, que je ne peux pas cliquer sur le bouton du setup pour l'installer, et passe donc au setup suivant, et pour terminer mon antivirus qui s'affiche alors que les autres n'ont pas fini, même pour certains setups, n'ont pas commencer à s'installer.
    Bref, au début les deux premiers setups ça va, mais après, c'est le bazard !!!

    Soit, j'ai pas mis comme il faut cette procédure , soit elle ne convient pas.
    Pourriez-vous m'aider ??,
    En vous remercient d'avance,
    Bon codding

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    Pour moi le pb n'est pas dans la procédure qui attend que Setup.exe soit terminé, mais c'est dans Setup.exe qu'il faut que les lancements successifs s'attendent.

  3. #3
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut merci Bernard
    Bonjour;
    Merci Bernard de m'avoir répondu.
    Ce sont les Setup du CD d'installation de ma nouvelle carte-mère. Mais, il y à tellement de pub, et le CD met tellement de temps à se lancer, que c'est plus énervant qu'autre chose.
    Alors, j'ai eu l'idée de copier les Setup et tous leurs répertoires avec tous les fichiers et uniquement ceux dont j'ai besoin.
    Puis, de créer moi-même mon propre CD d'installation de drivers, en rajoutant le Setup des drivers pour la carte graphique, puis, au final mon Setup pour l'antivirus.

    Donc, ça le fait bien à l'origine et je l'ai ai mis dans le même ordre, de toute façon j'ai pas le choix. Il faut que certains soient installés avant, ce qui oblige à les lancer dans un certain ordre.

    Et les setup sont les même que ceux que j'ai sur le site de téléchargement de drivers et de mise à jour de ceux-ci.
    Comme j'ai Windows 7, et que les conditions inacceptables de Mise à jour font que j'ai bien que rarement des virus qui bloquent mon PC, soit, bien souvent des exécutables qui s'installent partout .
    Alors, il mets arrivé, il n'y a pas si longtemps de réinstaller Windows. D'où cette idée de créer mon setup de drivers.

    Voilà , alors, j'aimerais bien réussir.

    Et avec innoSetup ???, se serait pas faisable ???.

    Merci et bonne journée et bon codding

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    Je voulais dire que via ta procédure, ton programme lance Setup.exe et attend bien que setup.exe soit terminé.
    Par contre si les différents drivers se télescope c'est que dans le programme Setup.exe où j'imagine que tu lances les un après les autres les différents drivers tu ne doit pas attendre la fin de l'un pour lancer l'autre.
    Mais je n'ai peut être pas compris ou tu n'as pas donné assez d'infos.

  5. #5
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut
    bonsoir Bernard;
    Merci pour votre réponse.
    voici mon code:

    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
    function  TForm_Installer_Pilotes.InstallSetup(sFile: String; wShowWin: Word): Boolean;
    var
      cExe: array [0..255] of Char;
      sExe: string;
      pcFile: PChar;
      StartInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      Result:=True;
      FindExecutable(PChar(ExtractFileName(sFile)), PChar(ExtractFilePath(sFile)), cExe);
      sExe:= string(cExe);
      if UpperCase(ExtractFileName(sExe))<>UpperCase(ExtractFileName(sFile))
      then pcFile:=PChar(' "'+sFile+'"')
      else pcFile:=nil;
      ZeroMemory(@StartInfo, SizeOf(StartInfo));
      with StartInfo do begin
        cb:=SizeOf(StartInfo);
        dwFlags:=STARTF_USESHOWWINDOW;
        wShowWindow:=wShowWin;
      end;
      if CreateProcess(PChar(sExe), pcFile, nil, nil, True, 0, nil, nil, StartInfo, ProcessInfo)
      then WaitForSingleObject(ProcessInfo.hProcess, INFINITE)
      else Result:=False;
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm_Installer_Pilotes.Installer_PilotesClick(Sender: TObject);
    begin
    ...
    Sleep(1000);
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Intel USB 3.0 Drivers\Setup.exe'), SW_SHOWNORMAL);
    cette procédure va très bien, cz sont les premiers drivers pour les ports USB

    puis; la suivante,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sleep(1000);
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Microsoft .Net Framework 4.5\dotNetFx45.exe'), SW_SHOWNORMAL);
    pas de soucis particulier, jusqu'ici, ça va bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sleep(1000);
    Label1.Caption:='Installation dela mise à jour Windows (KB2685811)
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Intel ME Driver\KB2685811_64.msu'), SW_SHOWNORMAL);
    il y à un problème avec cette mise à jour qui oblige de redémarrer l'ordi, je ne peux pas lancer les setup des drivers "Intel Chipset & Drivers" et pour "Installation Composants du moteur de gestion Intel", tant que je n'ai pas installé et redémarré l'ordi. Chose que j'aimerais bien éviter afin de tout installer dans la foulée
    J'ai donc un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /////
    Sleep(1000);
    Label1.Caption:='Installation du logiciel pour périphérique à chipset Intel
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Intel Chipset & Drivers\SetupChipset.exe'), SW_SHOWNORMAL);
     
    Sleep(1000);
    Label1.Caption:='Installation Composants du moteur de gestion Intel
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Intel ME Driver\SetupME.exe'), SW_SHOWNORMAL);
    ///// Impossible d'installer ces deux drivers sans redémarrer l'ordi, car la mise à jour (.msu) doit-être installée avant
    donc, la procédure passe au drivers de la carte graphique

    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
    Label1.Caption:='Installation des pilotes Graphiques Intel® HD 630, 
    Sleep(1000);
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Pilotes Intel ® Graphiques HD 630\Setup-Intel(R) HD Graphiqcs 630.exe'), SW_SHOWNORMAL);
     
    Label1.Caption:=Installation des pilotes Realtek Controller Drivers
    Sleep(1000);
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Realtek PCIE Win64\Setup.exe'), SW_SHOWNORMAL);
    Label1.Caption:=....
    Sleep(1000);
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Realtek High Definition Audio Driver\Setup.exe'), SW_SHOWNORMAL);
     
    Sleep(1000);
    Label1.Caption:=....
    InstallSetup(PChar(ExtractFilePath(Application.Exename)+'Norton  Antivirus\Norton.exe'), SW_SHOWNORMAL);
    c'est là ou ça ne va plus, car le setup antivirus n'attend pas le fin des installations des drivers Realtek et s'affiche devant.
    puis au final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Label1.Caption:='Fin de l''installation des pilotes et logiciel...';
    With CreateMessageDialog('Veuillez redémarrer l''ordinateur pour terminer l''installation des pilotes.', mtConfirmation,[mbOK,mbAbort])Do
    TButton(FindComponent('OK')).Caption:='&Redémarrer maintenant';
    ....
    Case ShowModal Of
    mrOk: Redemarre_PC(EWX_REBOOT or EWX_FORCE) ;
    .....
    et je redémarre l'ordi en cliquant sur le bouton "Ok";

    voilà mon code de mon bouton qui lance les setups des différents drivers,
    donc, ça se bouscule à trois endroits la msu et de ce fait, les drivers chipset et moteur de gestion Intel, ainsi que pour l'antivirus qui ...
    n'attend pas "son tour"
    sleep (1000); afin de faire une pause pour éviter que les divers setup ne se lancent trop vite et se chevauchent, mais .....

    Si vous avez un conseil, afin me mieux finaliser mon projet, je vous serais grandement reconnaissant
    En vous remerciant d'avance;
    Très cordialement
    PS:
    Les nouvelles carte-mères n'ont plus de ports ps2, tous les ports sont USB, une vrai galère !!! pour installer les drivers. D'où, mon idée d'instal
    automatique, dont le premier setup que j'installe est forcément celui pour les ports USB.
    J'aurai pu mettre que les trois plus important; USB, Carte graphique, et PCIE pour la carte réseau, mais, j'ai voulu tout mettre pour une installation complète des drivers. soit en cliquant sur le bouton avec la souris, soit avec la touche entrée si pas de souris...

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    Le pb vient peut être du fait que le setup d'un pilote est lui même le lanceur d'autres logiciels pour faire l'installation. Le fait d'attendre qu'un setup lancé soit terminé n'est pas forcement le gage que l'installation soit terminée.
    Par contre comment le savoir ?
    Un solution (peut élégante) est d'augmenter l'attente entre le lancement de chaque instal de drivers. Une seconde me parait très court et dans le cas présent on n'est peut être pas pressé !

    Autre solution mais qui ne résoudra pas forcément grand chose, c'est d'utiliser un outil d'installation type Innosetup. Je l'utilise pour installer mes applications mais je sais ce que je fais alors qu'en lançant le setup d'un driver la seule chose que l'on sait c'est que l'on espère que cela va le faire !!

  7. #7
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut remerciements
    Bonjour Bernard;
    Merci pour m'avoir répondu,
    C'est moi qui contrôle le setup car l'appli passe au premier plan, donc, je sais quand elle est terminée .
    C'est moi qui est la main,
    Le problème est que pour certaine, ça se bouscule. J'ai également pensé à augmenter le temps de pause.

    Comme vous dites, il y à surement un fichier qui contrôle les setups, car ils sont lancés en mode \VERYSILENT\NORESTART, sur le CD d'origine, car ils ne sont pas visibles et l'ordi ne redémarre pas, pourtant, il installe la mise à jour et ensuite les autres drivers.

    Oui, Je me suis penché sur le problème avec Innosetup, mais, sans grand succès.
    Car je n'ai pas compris comment lancer le Drivers d'essais, pilotes audio, car, les paramètres ne sont pas pris en compte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filename: "{userdocs}\essais InnoSetup\Realtek High Definition Audio Driver\setup.exe"; Parameters:"/SP-/VERYSILENT /SUPPRESSMSGBOXES /NORESTART" ;
    Auriez-vous quelques conseils ??.
    Je fais mes essais avec mes pilotes audio, c'est plus simple à installer et à désinstaller pour faire les essais.

    Soit je réussi à faire ce que je veux, soit je les installerais un à un, mais utiliser un CD, qui me met plein de fichiers partout dans mon PC et appli dont je n'en ai pas besoin, et qui met trop de temps à se lancer, je n'en ai pas besoin.
    j'estime avoir le droit d'installer l'OS et les appli que je veux dans mon PC. Mais aujourd'hui, non, on à plus le choix et je trouve cette façon de faire inacceptable de la part des grosses firmes américaines. D'où mon acharnement.
    En vous remercient pour vos réponses.
    Cordialement

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement en retraite
    Inscrit en
    Juin 2002
    Messages
    398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement en retraite
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2002
    Messages : 398
    Points : 300
    Points
    300
    Par défaut
    La syntaxe pour Innosetup me parait correcte pour la partie RUN du scripte et le passage de paramètres correspond bien à la doc d'Inno.
    il manque peut être un espace après '/SP-' ?
    Le Flag waituntilterminated est positionné par défaut, je ne vois pas ce qui gène.

    C'est vrai que perso pour installer les drivers je les récupère en priorité sur Internet ou on accède plus facilement, il me semble, à l'essentiel et sur les CD, je fouille pour essayer de trouver le répertoire Drivers ou semblable pour n'installer que ce qui est nécessaire.

  9. #9
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut re
    Merci Bernard;
    Tout à fait d'accord, je crois que je vais faire un dernier essais, et garder mes répertoires sur mon CD, et les lancer un par un si je n'y arrive pas.
    Le jour ou il n'y aura plus de souris prise en compte sur les cartes-mères, se sera plus difficile.
    Tous les ports sont des ports USB maintenant. Lancer des exécutables avec le clavier lorsqu'en plus, les drivers de la carte graphique ne sont pas installés, une vrai galère !!!!. Car les fenêtres ne s'affichent pas aux bonnes résolutions. Il faut vraiment connaître les raccourcis clavier.

    De ce fait, sur ma form, j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If key= (VK_Return) Then
    et je vais à la procédure du bouton et le tour était joué, mais, au final, ça se bouscule.
    j'arriverais peut-être à bricoler quelque chose de convenable !!!.
    Merci encore pour votre aide,

  10. #10
    Inactif  
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 47
    Points : 29
    Points
    29
    Par défaut juste pour dire ceci
    Bonjour;
    J'ai réussi à faire ce que je voulais comme je le voulais
    Ce n'était pas si compliqué, mais, je préfère m'abstenir d'en dire plus,
    car, si ça continu, je serais.... "Persona non grata" sur se site !!!!.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/11/2009, 10h51
  2. Réponses: 4
    Dernier message: 08/06/2007, 15h36
  3. Attendre qu'une tâche soit terminée avant d'en lancer une autre
    Par guidav dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 16/04/2007, 17h07
  4. Comment attendre que tous les thread lancés soient morts pour lancer une action.
    Par rgesnot dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 31/03/2007, 20h27
  5. Réponses: 5
    Dernier message: 16/11/2006, 10h50

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