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

9

Eu tenho um serviço do Windows (o servidor de integração Bamboo) que executa um arquivo em lotes como um subprocesso (um trabalho de construção) desse script. Nesse arquivo em lote, eu gostaria de iniciar um processo (vamos chamá-lo workerprocess.exe) e executar esse processo em segundo plano. Está tudo bem, eu usei:

start "title" /B workerprocess.exe

Está tudo bem e bem. O problema é que isso atrasa a conclusão do trabalho de construção. Portanto, o script em lote termina, mas, devido ao subprocesso workerprocess.exe, o serviço (Bamboo) não sabe que terminou: ainda aguarda (e exibe a saída do) workerprocess.exe.

Procurei na documentação o comando start e não consigo ver nada que faça o que quero. Vi essa pergunta, mas também não ajudou muito - o serviço ainda espera o processo terminar.

Então, suponho em resumo: como posso executar um novo processo a partir de um script em lote para que ele seja completamente desanexado e não retenha nada que esteja esperando a conclusão do script em lote.

Jack Scott
fonte
11
Você já tentou sem o parâmetro "/ B" para que ele não inicie o processo na mesma janela de comando?
21713 Josh
@ Josh, isso mudou as coisas. O serviço não recebe mais saída do processo, mas ainda é bloqueado por ele.
Jack Scott

Respostas:

2

Você já tentou o Hidden Start (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 seqüencialmente como um parâmetro (ou, por padrão, eu assumo) executado de forma assíncrona. Não sei como isso afetará sua contenção na CPU, memória ou disco ... mas o software também oferece a opção de esperar um pouco antes de executar a ação.

Sol
fonte
Quando escrevi minha resposta em setembro de 2013, o produto estava disponível gratuitamente. Infelizmente eles estão cobrando um preço.
Sun
3

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

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

Exemplo de uso:

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

2) SCHTASKS - Novamente aceita apenas dois argumentos - o comando e os argumentos. Também verifica se foi 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 invólucro completo de 'WScript.Shell' e todas as opções possíveis podem ser definidas nas opções de linha de comando.É um híbrido jscript / batch e pode ser chamado de bastão.

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

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

4) 'Win32_ProcessStartup' - novamente o invólucro completo e todas as opções são acessíveis através dos argumentos da linha de comando. Desta vez, é um híbrido WSF / lote com alguns Jscript e alguns pedaços de código VBScript - mas retorna o PID do processo iniciado. não oculto, algumas opções como coordenadas X / Y podem ser usadas.

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

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

5) o. Solução NET . A maioria das opções das opções ProcessStartInfo são usadas (mas no final eu estava cansada demais para incluir tudo):

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

call ProcessStartJS.bat "notepad" -arguments "/A openFile.txt"  -style Hidden -directory "." -title "notepad" -priority Normal
npocmaka
fonte
O link não foi encontrado
Rahil Wazir 14/10
@rahilwazir - editado.
Npocmaka # 14/15
11
Eu tentei isso um pouco - acho que os detalhes precisam ser limpos. Simplesmente olhando para a primeira abordagem: IExpress, o link é para hidder.bat, o exemplo acima usa outra coisa. Quando executei o script, ele falhou ao solicitar um EXE que não foi mencionado acima. Isso pode ser bom se houver remarcação no github, mas não existe. Finalmente, executando-produziu alguns ficheiros.DDF, mas nada mais ....
JOEG