Захват вывода из WshShell.Exec с помощью Windows Script Host

Я написал следующие две функции и вызвал вторую ("callAndWait") из JavaScript, работающего внутри Windows Script Host. Мое общее намерение - вызвать одну программу командной строки из другой. То есть я запускаю первоначальный сценарий с использованием cscript, а затем пытаюсь запустить что-то еще (Ant) из этого сценария.

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

}

К сожалению, когда я запускаю свою программу, я не получаю немедленной обратной связи о том, что делает вызываемая программа. Вместо этого вывод, кажется, приходит в замешательство и начинается, иногда ожидая, пока оригинальная программа не закончилась, а иногда кажется, что она заблокирована. Я действительно хочу, чтобы порожденный процесс фактически использовал тот же StdOut, что и вызывающий процесс, но я не вижу способа сделать это. Просто установка oExec.StdOut = WScript.StdOut не работает.

Есть ли альтернативный способ порождать процессы, которые будут использовать StdOut & StdErr процесса запуска? Я попытался использовать «WshShell.Run (), но это дает мне ошибку« Отказано в доступе ». Это проблематично, потому что я не хочу рассказывать своим клиентам об изменении конфигурации их среды Windows только для запуска моей программы.

Что я могу сделать?

Ответы на вопрос(5)

Ваш ответ на вопрос