Como executar um processo em segundo plano sem manter um arquivo em lote aberto?

6

Eu tenho um serviço do Windows (o Bamboo Integration Server) que executa um arquivo em lote como um subprocesso (um trabalho de compilação) desse script. Dentro desse arquivo em lote eu gostaria de poder iniciar um processo (vamos chamá-lo workerprocess.exe) e ter esse processo executado em segundo plano. Isso é tudo de bom, eu usei:

start "title" /B workerprocess.exe

Tudo isso é bom. O problema é que isso, em seguida, mantém a conclusão do trabalho de criação. Assim, o script em lote é concluído, mas devido ao subprocesso workerprocess.exe, o serviço (Bamboo) não sabe que terminou: ele ainda aguarda (e exibe a saída) o arquivo workerprocess.exe.

Eu procurei na documentação o comando start e não consigo ver nada que faça o que eu quero. Eu vi esta questão mas não o fez t realmente ajuda também - o serviço ainda acaba esperando o processo terminar.

Então eu acho que em resumo: como eu posso executar um novo processo a partir de um script em lote para que ele seja completamente desconectado e não retenha nada que esteja esperando que o script em lote seja concluído.

    
por Jack Scott 05.09.2013 / 04:45

2 respostas

2

Já experimentou o Início oculto (HSTART) ? (Custa US $ 20)

Eu o uso pessoalmente para executar um trabalho em lotes por hora com a janela oculta. Eles também mencionam que você pode executar comandos sequencialmente como um parâmetro (ou por padrão, eu suponho) executado de forma assíncrona. Não sei como isso afetará sua contenção em CPU, memória ou disco ... mas o software também oferece a opção de aguardar algum tempo antes de executar a ação.

    
por 05.09.2013 / 06:15
2

Todos os scripts vinculados podem ser baixados e salvos com qualquer nome que você achar conveniente.

1) O IEXPRESS solução - como argumentos aceita apenas o comando e seus argumentos.

Exemplo de uso:

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

2) SCHTASKS - aceita novamente apenas dois argumentos - o comando e os argumentos. Também verifica se é iniciado com permissões elevadas e, se possível, obtém o PID do processo com o comando WEVTUTIL.

Exemplo de uso:

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

3) 'WScript.Shell' - o script é um wrapper completo de 'WScript.Shell' e todas as opções possíveis podem ser definidas através das opções de linha de comando. É um híbrido jscript / batch e pode ser chamado de um morcego.

Exemplo de uso (para mais informações, imprima a ajuda com '-h'):

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

4) 'Win32_ProcessStartup'

Exemplo de uso (para mais informações, imprima a ajuda com '-h'). Isso exigirá o caminho completo para o executável / script, se ele não estiver no %path% :

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

5) A solução NET A maioria das opções de opções ProcessStartInfo são usadas (mas no final eu estava cansado demais para incluir tudo). Deve retornar o PID, mas não:

Exemplo de uso (para mais informações, imprima a ajuda com '-h'):

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
    
por 03.02.2015 / 00:36