Comment exécuter un processus en arrière-plan sans laisser ouvert un fichier batch?


9

J'ai un service Windows (le serveur d'intégration Bamboo) qui exécute un fichier de commandes en tant que sous-processus (un travail de génération) de ce script. Dans ce fichier de commandes, je voudrais pouvoir démarrer un processus (appelons-le workerprocess.exe) et exécuter ce processus en arrière-plan. C'est très bien, j'ai utilisé:

start "title" /B workerprocess.exe

Tout cela est bien et bon. Le problème est que cela retarde alors la fin du travail de génération. Le script de traitement par lots se termine donc, mais en raison du sous-processus workerprocess.exe, le service (Bamboo) ne sait pas qu'il est terminé: il attend toujours (et affiche la sortie de) le workerprocess.exe.

J'ai regardé dans la documentation de la commande start, et je ne vois rien qui fasse ce que je veux. J'ai vu cette question mais cela n'a pas vraiment aidé non plus - le service finit toujours par attendre la fin du processus.

Donc, je suppose en résumé: comment puis-je exécuter un nouveau processus à partir d'un script de traitement par lots afin qu'il soit complètement détaché et ne retarde rien qui attend que ce script de traitement se termine.


1
L'avez-vous essayé sans le paramètre "/ B" pour qu'il ne démarre pas le processus dans la même fenêtre de commande?
Josh

@JoshR, cela a changé les choses. Le service ne reçoit plus de sortie du processus, mais est toujours bloqué par celui-ci.
Jack Scott

Réponses:


2

Avez-vous essayé Hidden Start (HSTART) ? (Coûte 20 $)

Je l'utilise personnellement pour exécuter un travail par lots toutes les heures avec la fenêtre cachée. Ils mentionnent également que vous pouvez exécuter des commandes séquentiellement en tant que paramètre (ou par défaut, je suppose) exécuté de manière asynchrone. Je ne sais pas comment cela affectera votre conflit sur le processeur, la mémoire ou le disque ... mais le logiciel vous donne également la possibilité d'attendre un certain temps avant d'effectuer l'action.


Lorsque j'ai écrit ma réponse en septembre 2013, le produit était gratuit partout. Malheureusement, ils font payer un prix.
dim

3

Tous les scripts liés peuvent être téléchargés et enregistrés avec le nom qui vous convient.

1) La solution IEXPRESS - as arguments n'accepte que la commande et ses arguments.

Exemple d'utilisation:

call hidder.bat myBat.bat  myexe.exe
call myexe.exe

2) SCHTASKS - Accepte à nouveau seulement deux arguments - la commande et les arguments. Vérifie également si elle est démarrée avec des autorisations élevées et obtient si possible le PID du processus avec la commande WEVTUTIL.

Exemple d'utilisation:

call SCHPhidden.bat "cmd /c myBat.bat"  "argument"

3) 'WScript.Shell' - le script est un wrapper complet de 'WScript.Shell' et toutes les options possibles peuvent être définies via les options de la ligne de commande.C'est un hybride jscript / batch et peut être appelé comme une chauve-souris.

Exemple d'utilisation (pour plus d'informations, imprimez l'aide avec '-h'):

call ShellRunJS.bat "notepad.exe" -style 0 -wait no 

4) `` Win32_ProcessStartup '' - encore une fois, le wrapper complet et toutes les options sont accessibles via les arguments de la ligne de commande.Cette fois, c'est un hybride WSF / batch avec du Jscript et des morceaux de code VBScript - mais il renvoie le PID du processus démarré. non masqué, certaines options comme les coordonnées X / Y peuvent être utilisées.

Exemple d'utilisation (pour plus d'informations, imprimez l'aide avec '-h'). Cela nécessitera le chemin complet vers l'exécutable / script s'il n'est pas dans %path%:

call win32process.bat "notepad" -arguments "/A openFile.txt"  -showWindow 0 -title "notepad"

5) Le. Solution NET . La plupart des options des options ProcessStartInfo sont utilisées (mais à la fin j'étais trop fatigué pour tout inclure):

Exemple d'utilisation (pour plus d'informations, imprimez l'aide avec '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal

Le lien est introuvable
Rahil Wazir

@rahilwazir - édité.
npocmaka

1
J'ai essayé un peu - je pense que les détails doivent être nettoyés pour une excellente affaire. En regardant simplement la première approche: IExpress, le lien est vers hidder.bat l'exemple ci-dessus utilise autre chose. Lorsque j'ai exécuté le script, il n'a pas réussi à me demander un EXE qui n'est pas mentionné ci-dessus. Cela pourrait être correct s'il y avait une démarque sur github, mais ce n'est pas le cas. Enfin, son exécution a produit des fichiers .DDF, mais rien d'autre ....
JoeG
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.