¿Cómo ejecutar un proceso en segundo plano sin mantener abierto un archivo por lotes?

9

Tengo un servicio de Windows (el servidor de integración de Bamboo) que ejecuta un archivo por lotes como un subproceso (un trabajo de compilación) de ese script. Dentro de ese archivo por lotes, me gustaría poder iniciar un proceso (llamémoslo workerprocess.exe) y hacer que ese proceso se ejecute en segundo plano. Todo esto está bien, he usado:

start "title" /B workerprocess.exe

Eso está muy bien. El problema es que esto demora la finalización del trabajo de compilación. Por lo tanto, el script por lotes finaliza, pero debido al subproceso workerprocess.exe, el servicio (Bamboo) no sabe que ha finalizado: todavía espera (y muestra la salida de) workerprocess.exe.

He buscado en la documentación el comando de inicio y no puedo ver nada que haga lo que quiero. Vi esta pregunta pero tampoco sirvió de nada: el servicio aún termina esperando a que termine el proceso.

Así que supongo que en resumen: ¿cómo puedo ejecutar un nuevo proceso desde un script por lotes para que esté completamente separado y no retenga nada que esté esperando que se complete ese script por lotes?

Jack Scott
fuente
1
¿Lo ha intentado sin el parámetro "/ B" para que no se inicie el proceso dentro de la misma ventana de comandos?
Josh
@JoshR, eso cambió las cosas. El servicio ya no recibe resultados del proceso, pero aún está bloqueado por él.
Jack Scott,

Respuestas:

2

¿Has probado Hidden Start (HSTART) ? (Cuesta $ 20)

Lo uso personalmente para ejecutar un trabajo por lotes por hora con la ventana oculta. También mencionan que puede ejecutar comandos secuencialmente como un parámetro (o por defecto, supongo) que se ejecutan de forma asincrónica. No sé cómo esto afectará su contención en la CPU, la memoria o el disco ... pero el software también le da la opción de esperar un poco antes de realizar la acción.

Dom
fuente
Cuando escribí mi respuesta en septiembre de 2013, el producto era gratuito en todas partes. Lamentablemente están cobrando un precio.
Dom
3

Todos los scripts vinculados se pueden descargar y guardar con cualquier nombre que le resulte conveniente.

1) La solución IEXPRESS - como argumentos solo acepta el comando y sus argumentos.

Ejemplo de uso:

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

2) SCHTASKS : nuevamente acepta solo dos argumentos: el comando y los argumentos. También comprueba si se inició con permisos elevados y, si es posible, obtiene el PID del proceso con el comando WEVTUTIL.

Ejemplo de uso:

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

3) 'WScript.Shell' : el script es un contenedor completo de 'WScript.Shell' y todas las opciones posibles se pueden configurar a través de las opciones de la línea de comandos. Es un híbrido jscript / batch y se puede llamar como un murciélago.

Ejemplo de uso (para más información imprima la ayuda con '-h'):

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

4) 'Win32_ProcessStartup' : nuevamente el contenedor completo y todas las opciones son accesibles a través de los argumentos de la línea de comandos. Esta vez es WSF / lote híbrido con algunos códigos Jscript y VBScript, pero devuelve el PID del proceso iniciado. no ocultas, se pueden usar algunas opciones como las coordenadas X / Y.

Ejemplo de uso (para obtener más información, imprima la ayuda con '-h'). Esto requerirá la ruta completa al ejecutable / script si no está en %path%:

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

5) El. Solución neta . Se utilizan la mayoría de las opciones de ProcessStartInfo (pero al final estaba demasiado cansado para incluir todo):

Ejemplo de uso (para más información imprima la ayuda con '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
npocmaka
fuente
El enlace no se encuentra
Rahil Wazir
@rahilwazir - editado.
npocmaka
1
Probé esto un poco, creo que los detalles deben limpiarse en GRAN acuerdo. Simplemente mirando el primer enfoque: IExpress, el enlace es a hidder.bat el ejemplo anterior usa algo más. Cuando ejecuté el script, no pudo pedirme un EXE que no se menciona anteriormente. Eso podría estar bien si hubo un descuento en github, pero no lo hay. Finalmente, ejecutarlo produjo algunos archivos .DDF, pero nada más ....
JoeG