web-dev-qa-db-fra.com

Comment attendez-vous qu'un exe se termine dans un fichier batch?

J'essaie de créer un script pour exécuter un exe à l'arrêt afin d'installer sp1. mon script va quelque chose comme (pas le vrai script bat).

If installed GOTO END
    Install.exe
END:

Mon problème est que lorsqu'il s'exécute, il démarre le programme d'installation, puis termine le script parce que l'installateur a un processus différent et suit en arrêtant le processus d'installation parce que l'ordinateur arrête et arrête le système (du moins, c'est ce que je pense ça fait.)

Existe-t-il un moyen de lui dire d'attendre la fin du processus qu'il a commencé, puis de l'arrêter?

47
Kravlin

Essayez de courir

START /WAIT Install.exe
86
Bart De Vos

Un moyen plus court:

Install.exe|more

Aussi

install|rem

pourrait être utilisé, mais avec plus éventuellement, vous pourrez attraper une sortie de console. Et c'est la raison pour laquelle cela fonctionne - la commande canalisée attend l'entrée jusqu'à ce que le fichier .exe soit terminé

24
npocmaka

Soit en appelant l'exe directement depuis le fichier batch, soit en utilisant start /wait fonctionnera mais il y a une mise en garde.

Si l'exe que vous appelez crée ensuite un autre processus, comme appeler un autre exe, puis quitte le fichier de commandes continuera le traitement après la fin de l'exe appelé, car il n'a aucune connaissance des autres processus démarrés par lui.

Dans votre cas, c'est un vrai problème car les installateurs extraient normalement les fichiers d'une certaine forme de conteneur compressé, qui peut être incorporé dans l'exe lui-même, puis déclenchez l'un des fichiers extraits et quittez. Certains installateurs fournissent des paramètres de ligne de commande qui indiquent à l'exe d'origine de ne pas quitter tant que l'installation n'est pas terminée, c'est donc quelque chose que vous voudrez peut-être étudier. En dehors de cela, il n'y a pas vraiment de solution à cela avec des fichiers de commandes seuls et il faudrait une solution programmatique pour résoudre.

14
John Gardeniers

Voici un exemple d'utilisation de MATLAB! J'ai supposé que la configuration du chemin d'accès pour MATLAB est terminée et que la sortie de MATLAB est assurée par le fichier FileName.m (ou l'utilisateur l'a spécifié en interne).

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit
5
Rachit Kumar

J'ai eu le problème @John Gardeniers Had ou décrit, où mon exe a appelé un autre exe et s'est terminé, donc le démarrage/l'attente n'a pas fonctionné. J'ai créé une "boucle while" pour vérifier si elle fonctionne et ensuite continuer une fois que c'est fait. Les horaires peuvent être modifiés en fonction de vos besoins.

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN
1

Vous pouvez utiliser la commande start/wait. Cela démarre une application et attend sa fin.

Ou si vous savez combien de temps il faut pour exécuter, vous pouvez jeter un œil à la commande sleep, fournie par Windows Server 2003 Resource Kit Tools . Sleep.exe peut être utilisé pour suspendre votre lot pendant un certain nombre de secondes pour permettre au programme de s'installer complètement avant que le fichier de commandes ne procède à l'installation d'autre chose. Il existe certains programmes qui ignorent la syntaxe "démarrage/attente", car le programme lui-même lance un autre processus, alors le fichier sleep.exe est très utile.

0
Guido van Brakel