Batch start n'attend pas la fin d'installation
Résolu/Fermé
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
-
28 nov. 2021 à 22:26
brucine Messages postés 17900 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 novembre 2024 - 20 juin 2022 à 12:09
brucine Messages postés 17900 Date d'inscription lundi 22 février 2021 Statut Membre Dernière intervention 27 novembre 2024 - 20 juin 2022 à 12:09
A voir également:
- Fichier bat commande start
- Fichier bat - Guide
- Fichier rar - Guide
- Invite de commande - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
8 réponses
barnabe0057
Messages postés
14453
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 novembre 2024
4 917
Modifié le 28 nov. 2021 à 22:29
Modifié le 28 nov. 2021 à 22:29
Bonjour,
Essaie de remplacer la commande START par la commande CALL
Ou bien tu peux rajouter le commutateur /WAIT à la commande START.
Essaie de remplacer la commande START par la commande CALL
Ou bien tu peux rajouter le commutateur /WAIT à la commande START.
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
29 nov. 2021 à 00:30
29 nov. 2021 à 00:30
le call à bien fonctionné
merci !
merci !
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
6 juin 2022 à 15:58
6 juin 2022 à 15:58
bonjour. Je reviens sur mon post car je vois un nouveau pb lorsque je désinstalle un prog avec la commande wmic product where name ="<PROGRAM NAME HERE>" call uninstall /nointeractive
le call fonctionne bien si je veux lancer un prog .exe par exemple puis lancer d'autres commande ensuite, cela attend bien la fin de la première pour déclencher l'autre.
Mais avec wmic rien à faire je suis obligé de mettre un délai avec timeout /t avant le call sinon il lance tout de suite le .bat suivant. aucun pb entre 2 commande wmic, ça attend bien.
voici mon batch ;
wmic product where "name like 'application1'" call uninstall /nointeractive
wmic product where "name like 'application2'" call uninstall /nointeractive
timeout /t 300
call C:\install_app3.bat
une idée?
le call fonctionne bien si je veux lancer un prog .exe par exemple puis lancer d'autres commande ensuite, cela attend bien la fin de la première pour déclencher l'autre.
Mais avec wmic rien à faire je suis obligé de mettre un délai avec timeout /t avant le call sinon il lance tout de suite le .bat suivant. aucun pb entre 2 commande wmic, ça attend bien.
voici mon batch ;
wmic product where "name like 'application1'" call uninstall /nointeractive
wmic product where "name like 'application2'" call uninstall /nointeractive
timeout /t 300
call C:\install_app3.bat
une idée?
brucine
Messages postés
17900
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
27 novembre 2024
2 617
6 juin 2022 à 18:22
6 juin 2022 à 18:22
Bonjour,
en attendant que barnabe qui est plus compétent que moi en la matière passe par là, quelques commentaires.
Si la commande call ne fonctionne pas comme souhaité à l'intérieur de wmic, on peut comme suggéré utiliser
START /WAIT mais le comportement souhaité repose sur CMD /C, autrement dit en appelant un batch secondaire pour chaque commande wmic:
https://ss64.com/nt/start.html
On peut aussi tenter de piper la sortie wmic, reposant sur la lecture de ses Exit Codes, je n'y crois pas trop, avec quelque chose du style, mais bon:
Après, et hors PowerShell plus tolérant à cet égard, ça devient plus compliqué.
Nous avons ici la solution avec START /WAIT, une autre en bouclant un test SLEEP en fonction de ERRORLEVEL du nom de processus de désinstallation (à identifier dans le gestionnaire des tâches) correspondant à la commande à terminer (ie, pour qu'elle le soit, il faut qu'il vaille 1):
https://superuser.com/questions/1152521/how-do-i-make-a-batch-file-that-started-a-process-to-wait-for-the-process-to-ter
La même chose doit pouvoir s'obtenir en testant après les 2 commandes wmic réelles 2 autres testant l'existence du ProcessID du processus de désinstallation; ce n'est pas très simple puisque ce PID numérique doit être obtenu à partir du nom du processus:
https://www.developpez.net/forums/d1669516/general-developpement/programmation-systeme/windows/scripts-batch/recuperer-pid-d-processus-variable/
puis vérifier ci ce processus est encore actif:
https://stackoverflow.com/questions/34590331/how-to-get-process-id-of-a-specific-process-using-wmic-and-check-on-error
Les autres solutions passent aussi par tester si la tâche ou le processus lancé par la commande wmic est encore actif:
Voir ici en 26, 2 et 1: https://stackoverflow.com/questions/8177695/how-to-wait-for-a-process-to-terminate-to-execute-another-process-in-batch-file
Nous devons à Dave Benham, sorcier incontesté dans le cas de figure, un batch complexe qui teste par bouclage l'existence d'un fichier de verrouillage qui disparaît quand le programme est terminé:
https://www.dostips.com/forum/viewtopic.php?p=18477
en attendant que barnabe qui est plus compétent que moi en la matière passe par là, quelques commentaires.
Si la commande call ne fonctionne pas comme souhaité à l'intérieur de wmic, on peut comme suggéré utiliser
START /WAIT mais le comportement souhaité repose sur CMD /C, autrement dit en appelant un batch secondaire pour chaque commande wmic:
https://ss64.com/nt/start.html
On peut aussi tenter de piper la sortie wmic, reposant sur la lecture de ses Exit Codes, je n'y crois pas trop, avec quelque chose du style, mais bon:
wmic product where "name like 'application1'" call uninstall /nointeractive && wmic product where "name like 'application2'" call uninstall /nointeractive && call :INSTALL
:INSTALL
C:\install_app3.bat
Après, et hors PowerShell plus tolérant à cet égard, ça devient plus compliqué.
Nous avons ici la solution avec START /WAIT, une autre en bouclant un test SLEEP en fonction de ERRORLEVEL du nom de processus de désinstallation (à identifier dans le gestionnaire des tâches) correspondant à la commande à terminer (ie, pour qu'elle le soit, il faut qu'il vaille 1):
https://superuser.com/questions/1152521/how-do-i-make-a-batch-file-that-started-a-process-to-wait-for-the-process-to-ter
La même chose doit pouvoir s'obtenir en testant après les 2 commandes wmic réelles 2 autres testant l'existence du ProcessID du processus de désinstallation; ce n'est pas très simple puisque ce PID numérique doit être obtenu à partir du nom du processus:
https://www.developpez.net/forums/d1669516/general-developpement/programmation-systeme/windows/scripts-batch/recuperer-pid-d-processus-variable/
puis vérifier ci ce processus est encore actif:
https://stackoverflow.com/questions/34590331/how-to-get-process-id-of-a-specific-process-using-wmic-and-check-on-error
Les autres solutions passent aussi par tester si la tâche ou le processus lancé par la commande wmic est encore actif:
Voir ici en 26, 2 et 1: https://stackoverflow.com/questions/8177695/how-to-wait-for-a-process-to-terminate-to-execute-another-process-in-batch-file
Nous devons à Dave Benham, sorcier incontesté dans le cas de figure, un batch complexe qui teste par bouclage l'existence d'un fichier de verrouillage qui disparaît quand le programme est terminé:
https://www.dostips.com/forum/viewtopic.php?p=18477
barnabe0057
Messages postés
14453
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 novembre 2024
4 917
6 juin 2022 à 21:55
6 juin 2022 à 21:55
Bonjour adgm1, bonjour brucine,
brucine ( qui est aussi compétent que moi :-p ) a fait le tour du sujet et a donné des pistes très intéressantes.
Ayant fait moi-même un test avec la commande wmic product call uninstall pour désinstaller LibreOffice, je trouve étrange que ton script continue sur sa lancée alors que chez moi la commande attend (plusieurs minutes) que la désinstallation soit totalement terminée pour me repasser la main.
Si vraiment tu veux imposer que la commande soit terminée avant de passer à la suite, tu pourrais rajouter quelques lignes comme ceci :
brucine ( qui est aussi compétent que moi :-p ) a fait le tour du sujet et a donné des pistes très intéressantes.
Ayant fait moi-même un test avec la commande wmic product call uninstall pour désinstaller LibreOffice, je trouve étrange que ton script continue sur sa lancée alors que chez moi la commande attend (plusieurs minutes) que la désinstallation soit totalement terminée pour me repasser la main.
Si vraiment tu veux imposer que la commande soit terminée avant de passer à la suite, tu pourrais rajouter quelques lignes comme ceci :
wmic product where "name like 'application1'" call uninstall /nointeractive wmic product where "name like 'application2'" call uninstall /nointeractive :temporisation timeout /t 1 /nobreak tasklist | findstr /i "wmic.exe" >nul && goto :temporisation call C:\install_app3.bat
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
7 juin 2022 à 00:46
7 juin 2022 à 00:46
merci pour vos reponse. C'est un programme office que je veux désinstaller au préalable puis installer ensuite une version office x64. Sans désinstaller la x32 ca me met "nous ne pouvons pas installer la version 64bit car nous avons detecté une version 32bits..."
ca n'a pas fonctionné avec la ligne temporisation, je suppose que le wmic.exe à chercher dans la "tasklist" c'est le programme de désinstallation c'est bien ça? Car ce qui apparait dans le gestionnaire de tache c'est microsoft setup bootstrapper (32bits). Je présume qu'il faut remplacer wmic par ça dans le script pour lui indiquer de temporiser tant que ce bootstrapper est actif pour terminer la désinstallation
la version du script avec le && call :INSTALL n'a pas fonctionné non plus.
ca n'a pas fonctionné avec la ligne temporisation, je suppose que le wmic.exe à chercher dans la "tasklist" c'est le programme de désinstallation c'est bien ça? Car ce qui apparait dans le gestionnaire de tache c'est microsoft setup bootstrapper (32bits). Je présume qu'il faut remplacer wmic par ça dans le script pour lui indiquer de temporiser tant que ce bootstrapper est actif pour terminer la désinstallation
la version du script avec le && call :INSTALL n'a pas fonctionné non plus.
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
7 juin 2022 à 00:59
7 juin 2022 à 00:59
BINGO !! ca a marché en modifiant la partie temporisation comme suit :
:temporisation
timeout /t 3 /nobreak
tasklist | findstr /i "Microsoft Setup Bootstrapper (32bits)" >nul && goto :temporisation
j'ai mis 3 seconde de délai pour limiter toutes les lignes qui se superpose. D'ailleurs y a t'il un moyen d'éviter que les lignes s'ajoutent au fur et à mesure que la temporisation agit? en faisant par exemple un truc du type "clear screen" pour que ca ne mette pas des ligne en rallonge dans la fenetre MSDOS comme la désinstallation est assez longue
:temporisation
timeout /t 3 /nobreak
tasklist | findstr /i "Microsoft Setup Bootstrapper (32bits)" >nul && goto :temporisation
j'ai mis 3 seconde de délai pour limiter toutes les lignes qui se superpose. D'ailleurs y a t'il un moyen d'éviter que les lignes s'ajoutent au fur et à mesure que la temporisation agit? en faisant par exemple un truc du type "clear screen" pour que ca ne mette pas des ligne en rallonge dans la fenetre MSDOS comme la désinstallation est assez longue
barnabe0057
Messages postés
14453
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 novembre 2024
4 917
Modifié le 7 juin 2022 à 06:37
Modifié le 7 juin 2022 à 06:37
Bien joué !
Concernant les lignes qui s'ajoutent, tu peux rediriger la sortie de la commande TIMEOUT :
Concernant les lignes qui s'ajoutent, tu peux rediriger la sortie de la commande TIMEOUT :
timeout /t 3 /nobreak >nul
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
19 juin 2022 à 20:16
19 juin 2022 à 20:16
j'ai parlé trop vite en fait cela n'a pas fonctionné c'est bizarre le batch continue en boucle a chercher le programme dans taskmanager mais ne parvient ni à le trouver ni à le fermer pour poursuivre. La seule fois où ça a fonctionné j'ai du faire un truc manuellement mais là ça ne fonctionne plus
une idée?
une idée?
barnabe0057
Messages postés
14453
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
24 novembre 2024
4 917
19 juin 2022 à 20:37
19 juin 2022 à 20:37
il faut que je fasse des tests, il s'agit de quelle version d'Office ? 2013, 2016, 2019, 2021 ?
adgm1
Messages postés
285
Date d'inscription
jeudi 4 octobre 2007
Statut
Membre
Dernière intervention
24 novembre 2024
10
20 juin 2022 à 12:02
20 juin 2022 à 12:02
c'est office 2007. J'ai remarqué aussi qu'à la désinstallation il y a une tache msiexec.exe qui s'execute . J'ai essayé de remplacé bootstrapper par msiexec mais maintenant j'ai un pb de redemarrage du poste dès la fin de la désinstallation de office2007
brucine
Messages postés
17900
Date d'inscription
lundi 22 février 2021
Statut
Membre
Dernière intervention
27 novembre 2024
2 617
20 juin 2022 à 12:09
20 juin 2022 à 12:09
Bonjour,
Bootstrapper ne fait que vérifier que msi.exec existe pour poursuivre la désinstallation; dans ces conditions, c'est probablement non pas Bootstrapper qu'il faut temporiser, mais le process suivant correspondant à msi.exec.
Je n'ai pas fait ça depuis un moment, je n'y vois pas de raison mais on sait jamais, je ne sais plus (tester hors le script) si la désinstallation de Office 2007 propose (ou impose) le redémarrage.
Bootstrapper ne fait que vérifier que msi.exec existe pour poursuivre la désinstallation; dans ces conditions, c'est probablement non pas Bootstrapper qu'il faut temporiser, mais le process suivant correspondant à msi.exec.
Je n'ai pas fait ça depuis un moment, je n'y vois pas de raison mais on sait jamais, je ne sais plus (tester hors le script) si la désinstallation de Office 2007 propose (ou impose) le redémarrage.