Windows Script Host для Windows 2000/XP
Шрифт:
Кроме этого, имеется возможность запустить сценарий, файл с которым находится на локальной машине, на другой удаленной машине. Для выполнения сценариев на удаленных машинах и обработки ошибок, возникающих в таких сценариях, используются объекты
WshController
, WshRemote
и WshRemoteError
. Объект WshScriptExec
В WSH 5.6 появилась возможность при помощи метода
WshShell.Exec
запускать консольное приложение или сценарий как дочерний процесс выполняемого сценария, т.е. с теми же переменными
WshShell.Exec
выполняет командную строку, указанную в качестве его параметра, и возвращает объект WScriptExec
, свойства и методы которого предоставляют информацию о запущенной задаче и обеспечивают доступ к ее стандартным потокам ввода/вывода и ошибок (обработка этих потоков необходима в силу того, что непосредственно на экране строки, выводимые дочерним приложением, не появляются). Отметим также, что с помощью метода
WshShell.Exec
можно запускать и графические оконные Windows-приложения. В этом случае создаваемый объект WshScriptExec
полезен тем, что он позволяет получить идентификатор запущенного процесса (Process ID, PID), который затем можно использовать для активизации задачи при помощи метода WshShell.AppActivate
. Объект
WScriptExec
имеет единственный метод Terminate
, с помощью которого можно прервать выполнение дочернего процесса. Например:
var WshShell=WScript.CreateObject("WScript.Shell");
var ChildJob = WshShell.Exec("cscript ChildScript.js");
ChildJob.Terminate;
Метод
Terminate
пытается закрыть приложение, посылая ему сообщение WM_CLOSE
. Если это не срабатывает, задача завершается принудительно. Методом Terminate
нужно пользоваться только в крайнем случае, т.к. некоторые приложения, завершенные таким способом, не полностью освобождают ресурсы. Поэтому, как правило, лучше дождаться, когда запущенная задача сама закончит свою работу. Свойства объекта
WshScriptExec
описаны в табл. 1.18. Таблица 1.18. Свойства объекта WshScriptExec
| Свойство | Описание |
|---|---|
ExitCode | Содержит код выхода, устанавливаемый дочерней задачей при завершении выполнения |
ProcessID | Содержит идентификатор процесса (ProcessID, PID), которому соответствует объект WshScriptExec |
Status | Содержит информацию о ходе выполнения дочерней задачи |
StdOut | Позволяет сценарию-родителю считывать информацию из стандартного выходного потока запущенной дочерней задачи |
StdIn | Позволяет сценарию-родителю записывать информацию в стандартный входной поток запущенной дочерней задачи |
StdErr | Позволяет сценарию-родителю считывать информацию из стандартного потока ошибок запущенной дочерней задачи |
Свойство ProcessID
В следующем
ProcessID
используется для активизации стандартного калькулятора Windows. Напомним, что для этой цели также можно при вызове метода WshShell.AppActivate
использовать название окна "Calculator". Листинг 1.25. Активизация приложений с помощью PID
/*****************************************************************/
/* Имя: MakeCalc.js */
/* Язык: JScript */
/* Описание: Активизация приложений с помощью PID */
/*****************************************************************/
var WshShell, theCalculator;
//Создаем объект WshShell
WshShell = WScript.CreateObject("WScript.Shell");
//Запускаем калькулятор
theCalculator = WshShell.Exec("calc");
//Приостанавливаем выполнение сценария для того, чтобы окно
//калькулятора появилось на экране
WScript.Sleep(500);
//Активизируем окно калькулятора
WshShell.AppActivate(theCalculator.ProcessID);
//Посылаем нажатия клавиш в окно калькулятора
WshShell.SendKeys("1{+}");
WScript.Sleep(500);
WshShell.SendKeys("2");
WScript.Sleep(500);
WshShell.SendKeys("~");
/************* Конец *********************************************/
Свойство Status
После запуска дочернего процесса сценарий-родитель продолжает выполняться асинхронно, поэтому необходимо уметь определять, выполняется ли еще запущенная задача, или она уже завершена. Для этой цели используется свойство
Status
: если значение Status
равно 0, то это означает, что дочерний процесс находится в стадии выполнения, если Status
равно 1, то запущенная задача уже завершена. Например, в результате выполнения приведенного в листинге 1.26 сценария ChildStatus.js на экран выведется несколько строк "Команда еще выполняется" (рис. 1.12). Листинг 1.26. Контроль состояния дочернего процесса
/*****************************************************************/
/* Имя: ChildStatus.js */
/* Язык: JScript */
/* Описание: Контроль состояния дочернего процесса */
/*****************************************************************/
var WshShell,theJob;
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Запускаем дочернее приложение
theJob = WshShell.Exec("xcopy /?");
for (;;) {
if (theJob.status==1) //Проверяем завершение дочернего процесса
break; //Выходим из цикла
else WScript.Echo("Команда еще выполняется");
}
Поделиться:
Популярные книги
100 легенд рока. Живой звук в каждой фразе
Документальная литература:
биографии и мемуары
7.50
рейтинг книги
Рассвет русского царства. Книга 2
2. Новая Русь
Фантастика:
альтернативная история
попаданцы
историческое фэнтези
5.00
рейтинг книги
Время гарпии
17. Ксанф
Фантастика:
юмористическая фантастика
5.00
рейтинг книги
Черный ветер
18. Дирк Питт
Детективы:
боевики
6.25
рейтинг книги
Сирота
1. Помещик
Фантастика:
альтернативная история
5.71
рейтинг книги
Неучтенный. Дилогия
Неучтенный
Фантастика:
боевая фантастика
попаданцы
7.98
рейтинг книги
Рыцарь Империи
3. Одержимый
Фантастика:
фэнтези
9.39
рейтинг книги
Пограничная застава
Проза:
военная проза
5.00
рейтинг книги
Годы прострации
7. Дневники Адриана Моула
Юмор:
юмористическая проза
4.00
рейтинг книги
Дети немилости
Фантастика:
фэнтези
7.00
рейтинг книги
Первый среди равных. Книга IX
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Дом с привидениями
Научно-образовательная:
история
6.20
рейтинг книги
Битва за небеса
Великие противостояния
Фантастика:
альтернативная история
4.67
рейтинг книги
О природе вещей
Старинная литература:
античная литература
5.00