Capturando a saída do WshShell.Exec usando o Windows Script Host
Escrevi as duas funções a seguir e chamo a segunda ("callAndWait") do JavaScript em execução no Windows Script Host. Minha intenção geral é chamar um programa de linha de comando de outro. Ou seja, estou executando o script inicial usando cscript e depois tentando executar outra coisa (Ant) desse script.
function readAllFromAny(oExec)
{
if (!oExec.StdOut.AtEndOfStream)
return oExec.StdOut.ReadLine();
if (!oExec.StdErr.AtEndOfStream)
return "STDERR: " + oExec.StdErr.ReadLine();
return -1;
}
// Execute a command line function....
function callAndWait(execStr) {
var oExec = WshShell.Exec(execStr);
while (oExec.Status == 0)
{
WScript.Sleep(100);
var output;
while ( (output = readAllFromAny(oExec)) != -1) {
WScript.StdOut.WriteLine(output);
}
}
}
Infelizmente, quando executo meu programa, não recebo feedback imediato sobre o que o programa chamado está fazendo. Em vez disso, a saída parece entrar e sair, às vezes aguardando até que o programa original termine, e às vezes parece ter um impasse. O que realmente quero fazer é que o processo gerado compartilhe o mesmo StdOut do processo de chamada, mas não vejo uma maneira de fazer isso. Apenas definir oExec.StdOut = WScript.StdOut não funciona.
Existe uma maneira alternativa de gerar processos que compartilhem o StdOut & StdErr do processo de inicialização? Tentei usar o "WshShell.Run (), mas isso gera um erro de" permissão negada ", o que é problemático, porque não quero que meus clientes digam para alterar a configuração do ambiente Windows apenas para executar o meu programa.
O que eu posso fazer?