Come eseguire un processo in background senza tenere aperto un file batch?


9

Ho un servizio Windows (il server di integrazione Bamboo) che esegue un file batch come sottoprocesso (un processo di creazione) di quello script. All'interno di quel file batch vorrei essere in grado di avviare un processo (chiamiamolo workerprocess.exe) e che quel processo venga eseguito in background. Va tutto bene, ho usato:

start "title" /B workerprocess.exe

Va tutto bene. Il problema è che questo ostacola il completamento del lavoro di compilazione. Quindi lo script batch termina, ma a causa del sottoprocesso workerprocess.exe, il servizio (Bamboo) non sa che è terminato: attende ancora (e visualizza l'output di) workerprocess.exe.

Ho cercato nella documentazione il comando start e non riesco a vedere nulla che faccia quello che voglio. Ho visto questa domanda ma non mi è stato di grande aiuto - il servizio finisce ancora in attesa che il processo finisca.

Quindi suppongo in sintesi: come posso eseguire un nuovo processo da uno script batch in modo che sia completamente staccato e non regge tutto ciò che accade in attesa del completamento dello script batch.


1
L'hai provato senza il parametro "/ B" in modo che non avvii il processo nella stessa finestra di comando?
Josh,

@JoshR, che ha cambiato le cose. Il servizio non riceve più output dal processo, ma è comunque bloccato da esso.
Jack Scott,

Risposte:


2

Hai provato Hidden Start (HSTART) ? (Costa $ 20)

Lo uso personalmente per eseguire un processo batch orario con la finestra nascosta. Dicono anche che è possibile eseguire i comandi in sequenza come parametro (o per impostazione predefinita, presumo) eseguito in modo asincrono. Non so come questo influirà sulla tua contesa su CPU, memoria o disco ... ma il software ti dà anche la possibilità di aspettare un po 'di tempo prima di eseguire l'azione.


Quando ho scritto la mia risposta nel settembre 2013, il prodotto era gratuito in tutto. Purtroppo fanno pagare un prezzo.
Dom

3

Tutti gli script collegati possono essere scaricati e salvati con qualsiasi nome tu ritenga conveniente.

1) La soluzione IEXPRESS - come argomenti accetta solo il comando e i suoi argomenti.

Esempio di utilizzo:

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

2) SCHTASKS : accetta nuovamente solo due argomenti: il comando e gli argomenti. Controlla anche se è stato avviato con autorizzazioni elevate e, se possibile, ottiene il PID del processo con il comando WEVTUTIL.

Esempio di utilizzo:

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

3) "WScript.Shell" : lo script è il wrapper completo di "WScript.Shell" e ogni opzione possibile può essere impostata tramite le opzioni della riga di comando. È un ibrido jscript / batch e può essere chiamato come bat.

Esempio di utilizzo (per maggiori informazioni stampa la guida con '-h'):

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

4) 'Win32_ProcessStartup' - ancora un wrapper completo e tutte le opzioni sono accessibili attraverso gli argomenti della riga di comando. Questa volta è ibrido WSF / batch con alcuni pezzi di codice Jscript e VBScript - ma restituisce il PID del processo avviato. non nascosto alcune opzioni come le coordinate X / Y possono essere utilizzate.

Esempio di utilizzo (per ulteriori informazioni, stampare la guida con '-h'). Ciò richiederà il percorso completo dell'eseguibile / dello script se non si trova in %path%:

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

5) Il. Soluzione NET . Vengono utilizzate la maggior parte delle opzioni di ProcessStartInfo (ma alla fine ero troppo stanco per includere tutto):

Esempio di utilizzo (per maggiori informazioni stampa la guida con '-h'):

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

Il collegamento non è stato trovato
Rahil Wazir,

@rahilwazir - modificato.
npocmaka,

1
Ho provato questi un po '- penso che i dettagli debbano essere ripuliti un ottimo affare. Osservando semplicemente il primo approccio: IExpress, il collegamento è a hidder.bat l'esempio sopra usa qualcos'altro. Quando ho eseguito lo script, non è riuscito a chiedermi un EXE che non è menzionato sopra. Ciò potrebbe andare bene se ci fosse un ribasso su Github, ma non lo è. Infine, eseguendolo ha prodotto alcuni file .DDF, ma nient'altro ....
JoeG
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.