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.
la source
Réponses:
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.
la source
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:
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:
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'):
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%
: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'):
la source