Przechwytywanie danych wyjściowych z WshShell.Exec przy użyciu hosta skryptów systemu Windows

Napisałem dwie następujące funkcje i wywołałem drugą („callAndWait”) z JavaScript działającego w Hostie skryptów Windows. Moim ogólnym zamiarem jest wywołanie jednego programu wiersza poleceń z innego. Oznacza to, że uruchamiam początkowe skrypty za pomocą cscript, a następnie próbuję uruchomić coś innego (Ant) z tego skryptu.

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);
  }
 }

}

Niestety, kiedy uruchamiam mój program, nie otrzymuję natychmiastowej informacji zwrotnej o tym, co robi wywoływany program. Wydaje się, że dane wyjściowe pojawiają się pasują i zaczynają, czasami czekając na zakończenie oryginalnego programu, a czasami wydaje się, że ma zakleszczenie. To, co naprawdę chcę zrobić, to udostępnić ten sam proces StdOut jako proces wywołujący, ale nie widzę sposobu, aby to zrobić. Po prostu ustawienie oExec.StdOut = WScript.StdOut nie działa.

Czy istnieje alternatywny sposób odradzania procesów, które będą współużytkować StdOut i StdErr procesu uruchamiania? Próbowałem użyć „WshShell.Run (), ale to daje mi błąd„ odmowa uprawnień ”. To problematyczne, ponieważ nie chcę mówić moim klientom, aby zmienili konfigurację środowiska Windows tylko po to, aby uruchomić mój program.

Co mogę zrobić?

questionAnswers(5)

yourAnswerToTheQuestion