Napisałem następujące dwie funkcje i wywołałem drugą ("callAndWait") z JavaScript działającego w Hosta skryptów systemu Windows. Moim ogólnym zamiarem jest wywołanie jednego programu linii poleceń od drugiego. To znaczy, uruchamiam początkowe skryptowanie przy użyciu cscript, a następnie próbuję uruchomić coś innego (Ant) z tego skryptu.Przechwytywanie danych wyjściowych z WshShell.Exec przy użyciu Hosta skryptów systemu Windows
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, gdy uruchomię mój program, nie uzyskać natychmiastowe informacje zwrotne o to, co nazywa się program robi. Zamiast tego dane wyjściowe wydają się pasować i uruchamiają się, czasami czekając aż skończy się pierwotny program, a czasami wydaje się, że ma on zakleszczenie. To, co naprawdę chcę zrobić, to to, że proces odradzania faktycznie udostępnia ten sam StdOut jako proces wywołujący, ale nie widzę sposobu, aby to zrobić. Ustawienie parametru oExec.StdOut = WScript.StdOut nie działa.
Czy istnieje alternatywny sposób na odradzanie procesów, które będą udostępniać StdOut & StdErr procesu uruchamiania? Próbowałem użyć "WshShell.Run(), ale to daje mi błąd" odmowa uprawnień ". Jest to problematyczne, ponieważ nie chcę mówić moim klientom, aby zmienić sposób skonfigurowania ich środowiska Windows tylko po to, aby uruchomić mój program.
Co mogę zrobić?
Nie sądzę, istnieje sposób, aby to zrobić, Szukałam przez chwilę sam. Moim "rozwiązaniem" jest posiadanie funkcji poprzedzającej polecenie, które ustawia wymagane zmienne środowiskowe za każdym razem, gdy wywoływane jest polecenie, tak jak w pliku WShell.Exec ("% COMSPEC% setenvvars.bat & actual_program.exe"). Całkiem niezgrabne. – Roel