Comment exécuter un processus en arrière-plan sans garder un fichier de commandes ouvert?

J'ai un service Windows (le serveur d'intégration Bamboo) qui exécute un fichier batch en tant que sous-processus (un travail de construction) de ce script. Dans ce fichier par lots, je voudrais pouvoir démarrer un processus (appelons-le workprocess.exe) et que ce processus soit exécuté en arrière-plan. Tout va bien, j'ai utilisé:

start "title" /B workerprocess.exe 

Tout va bien et bien. Le problème est que cela confirme l'achèvement du travail de construction. Ainsi, le script de démarrage se termine, mais en raison du sous-processus workprocess.exe, le service (Bamboo) ne sait pas qu'il a fini: il attend toujours (et affiche le résultat) du workprocess.exe.

J'ai regardé dans la documentation pour la commande de démarrage, et je ne vois rien qui fait 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 de la procédure.

Donc, je suppose en résumé: comment puis-je exécuter un nouveau processus à partir d'un script de lot pour qu'il soit complètement détaché et ne supprime rien qui arrive à attendre que ce script de lot soit terminé.

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

Je l'utilise personnellement pour exécuter un travail de lot horaire avec la fenêtre cachée. Ils mentionnent également que vous pouvez exécuter séquentiellement les commandes en tant que paramètre (ou par défaut, je suppose) s'exécuter de manière asynchrone. Je ne sais pas comment cela affectera votre argument sur CPU, mémoire ou disque … mais le logiciel vous donne également l'option d'attendre un peu avant d'effectuer l'action.

Tous les scripts liés peuvent être téléchargés et sauvegardés avec n'importe quel nom que vous jugez pratique.

1) La solution IEXPRESS – comme arguments accepte uniquement la commande et ses arguments.

Exemple d'utilisation:

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

2) SCHTASKS – Encore une fois, n'accepte que deux arguments – la commande et les arguments. Vérifie également s'il est démarré avec des autorisations élevées et, si possible, obtient 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 ligne de commande. C'est un hybride jscript / batch et peut être appelé comme une batte.

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 enveloppe complète et toutes les options sont accessibles via les arguments de la ligne de commande. Cette fois, c'est WSF / batch hybride avec certains Jscript et quelques morceaux de code VBScript – mais il renvoie le PID du processus démarré. Pas caché, 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 inclure tout). Il devrait renvoyer le PID mais ce n'est pas le cas:

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