wscript shell что это

Объект WshShell

1. Создание объекта

2. Свойства

2.1. CurrentDirectory

Возвращаемое значение: строка, путь к текущему каталогу.

Замечание: чтение и запись.

2.2. Environment

Замечание: чтение и запись. В коллекцию можно добавлять элементы и удалять их.

2.3. SpecialFolders

Возвращаемое значение: объект-коллекция «SpecialFolders», содержащая пути к специальным папкам Windows. Некоторые специальные папки:

Замечание: только чтение.

3. Методы

3.1. ExpandEnvironmentStrings

Назначение: возвращает значение переменной среды текущего командного окна.

3.2. Popup

Назначение: выводит на экран модальное окно сообщения.

Описание: возвращает целое значение, с помощью которого можно узнать, какая кнопка быля нажата пользователем. Возможные значения:

3.3. SendKeys

Назначение: посылает одно или несколько нажатий клавиш в активное окно (имитация набора на клавиатуре).

Описание: каждая клавиша задаётся своим символом. Например, чтобы задать нажатие друг за другом клавиш А, Б и В, нужно указать в качестве параметра строку «АБВ». Некоторые специальные символы следует всегда задавать заключёнными в фигурные скобки. Перечень таких символов:

Задание неотображаемых символов и специальных клавиш:

Задание нескольких нажатий: «» приведёт к нажатию клавиши 42 раза подряд, «» приведёт к нажатию клавиши 10 раз подряд.

Метод не может быть использован для посылки нажатий клавиш в приложения MS-DOS.

3.4. Run

Назначение: создаёт новый независимый процесс, который запускает заданное приложение.

Описание: если параметр «WaitOnReturn» установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.

3.5. Exec

Назначение: создаёт новый дочерний процесс (т.е. процесс с теми же переменными среды), который запускает заданное консольное приложение. Возвращается объект «WshScriptExec», который позволяет контролировать ход выполнения запущенного приложения и обеспечивает доступ к потокам StdIn, StdOut и StdErr этого приложения.

Описание: с помощью данного метода можно запускать и графические оконные приложения. В этом случае возвращаемый объект «WshScriptExec» полезен тем, что позволяет получить идентификатор запущенного процесса, который можно использовать, например, для активизации приложения с помощью метода AppActivate.

3.6. AppActivate

Назначение: активизирует указанное окно какого-либо приложения. Возвращает True в случае успеха и False в случае неудачи.

Описание: если в качестве параметра указан заголовок окна приложения, значение параметра сравнивается по очереди с заголовками окон всех запущенных приложений. Если не найдено ни одного точного совпадения, будет производиться поиск окна, заголовок которого начинается с указанной строки. Если и в этом случае не будет найдено ни одного подходящего окна, будет производиться поиск окна, заголовок которого заканчивается на указанную строку. Если будет найдено несколько подходящих окон, произойдёт активизация одного из них (произвольно).

3.7. RegDelete

Назначение: удаляет из реестра заданный параметр или раздел целиком.

Описание: если «Name» оканчивается символом «\», метод удаляет ключ целиком, в противном случае удаляется параметр. Параметр «Name» должен начинаться с одного из корневых ключей:

3.8. RegRead

Назначение: читает из реестра заданный параметр или значение по умолчанию для раздела.

Описание: если «Name» оканчивается символом «\», метод считывает значение по умолчанию для раздела, в противном случае считывается параметр. Параметр «Name» должен начинаться с одного из корневых ключей:

3.9. RegWrite

Назначение: записываает в реестр заданный параметр или раздел.

Описание: если «Name» оканчивается символом «\», метод записывает раздел, в противном случае записывается параметр. Параметр «Name» должен начинаться с одного из корневых ключей:

3.10. LogEvent

Назначение: протоколирует событие в журнале WindowsNT или в файле WSH.log. Возвращает True в случае успеха и False в противном случае.

3.11. CreateShortcut

— строка, полный путь к создаваемому или изменяемому файлу ярлыка.

4. Объект WshScriptExec

4.1. Создание объекта

4.2. Свойства

4.2.1. ExitCode

Возвращаемое значение: код выхода, устанавливаемый дочерней задачей при завершении выполнения.

Замечание: только чтение.

4.2.2. ProcessID

Возвращаемое значение: идентификатор запущенного процесса (PID).

Замечание: только чтение.

4.2.3. Status

Возвращаемое значение: состояние запущенного процесса. Возможные значения:

Замечание: только чтение.

4.2.4. StdOut

Возвращаемое значение: объект «TextStream», соответствующий стандартному выходному потоку запущенной задачи.

Замечание: только чтение.

4.2.5. StdIn

Возвращаемое значение: объект «TextStream», соответствующий стандартному входному потоку запущенной задачи.

Замечание: только чтение.

4.2.6. StdErr

Возвращаемое значение: объект «TextStream», соответствующий стандартному потоку ошибок запущенной задачи.

Замечание: только чтение.

4.3. Методы

4.3.1. Terminate

Назначение: пытается закрыть приложение, посылая ему сообщение WM_CLOSE. Если это не срабатывает, задача завершается принудительно.

5. Объект WshShortcut

5.1. Создание объекта

5.2. Свойства

5.2.1. Arguments

Возвращаемое значение: строка, параметры командной строки программы, запускаемой ярлыком.

Замечание: чтение и запись.

5.2.2. Description

Возвращаемое значение: строка, описание в поле «Комментарий» («Comment») в свойствах ярлыка.

Замечание: чтение и запись.

5.2.3. FullName

Возвращаемое значение: строка, полный путь к файлу ярлыка.

Замечание: только чтение.

5.2.4. Hotkey

Возвращаемое значение: строка, содержащая названия горячих клавиш, разделённые знаком «+».

Замечание: чтение и запись.

5.2.5. IconLocation

Возвращаемое значение: строка, содержащая расположение иконки для ярлыка в формате «путь к файлу, индекс иконки». Индексы иконок начинаются с нуля.

Замечание: чтение и запись.

5.2.6. TargetPath

Возвращаемое значение: строка, содержащая путь к исполняемому файлу.

Замечание: чтение и запись.

5.2.7. WindowStyle

Возвращаемое значение: число, определяющее вид окна запускаемого приложения. Возможные значения:

Замечание: чтение и запись.

5.2.8. WorkingDirectory

Возвращаемое значение: строка, путь к рабочему каталогу ярлыка.

Источник

Доброго времени суток всем читателям блога scriptcoding.ru. В этой статье мы подробно рассмотрим метод Run Wscript.Shell объекта. Данный метод служит для запуска внешних приложений из тела сценариев Windows Script Host.

wscript shell что это. Смотреть фото wscript shell что это. Смотреть картинку wscript shell что это. Картинка про wscript shell что это. Фото wscript shell что это

Для начала мы рассмотрим теоретическую часть, а потом приступим к программированию.

Run (strCommand, [intWindowStyle], [bWaitOnReturn]) – данный метод служит для запуска другого приложения как в консольном режиме (командная строка), так и в оконном. При открытии исполняемого файла создается новый процесс. Ему передаются следующие параметры:

strCommand – данный параметр является обязательным, поскольку задает путь для файла или команды. Стоит учитывать, что если путь содержит пробелы, то его обязательно стоит заключать в двойные кавычки, иначе, возникнет ошибка » The system cannot find the file specified » – система не может найти указанный файл. Также полезно, использовать переменные окружения в пути к приложению, это экономит время.

intWindowStyle – является необязательным, и задает стиль окна. Параметр может принимать целые значения от 0 до 10. Согласно документации, в языке vbscript можно использовать именованные константы, но, они не всегда дают ожидаемый результат, и так как эти значения между собой повторяются, я упомянул лишь три:

bWaitOnReturn – может принимать true – сценарий будет ожидать завершения работы запущенного приложения, и только потом перейдет к выполнению следующей строчки кода, false – будет продолжатся выполнение сценария независимо от того, завершилась работа запущенного приложения или нет. Также следует учесть, что если установлено true, то метод вернет код выхода вызванного приложения, если установлено false – всегда будет возвращаться ноль.

Хорошо, теперь настало время заняться программирование. Для начала напишем программный код на языке VBScript:

Давайте проанализируем логику работы данного сценария. Переменная path хранит путь к папке System32, так как в ней у нас лежат исполняемые файлы notepad и calc. Переменная окружения » %WINDIR% » позволяет сократить строки кода и не писать » C:\\Windows «. WshShell содержит ссылку на экземпляр объекта Wscript.Shell, видим, чтобы создать саму ссылку, мы перед переменной прописали ключевое слово set, после чего идет вызов метода CreateObject класса WScript, подробней о работе с объектами читайте «Урок 8 по VBScript: Объекты и классы» и «Урок 4 по JScript: Создание собственных объектов». Далее мы запускаем блокнот с помощью метода Run Wscript Shell класса, через переменную WshShell. Для программы notepad мы третий параметр команды Run поставили в true, поэтому, исполняемый файл calc запустится только после закрытия приложения блокнот, плюс, перед этим появится информационное сообщение.

wscript shell что это. Смотреть фото wscript shell что это. Смотреть картинку wscript shell что это. Картинка про wscript shell что это. Фото wscript shell что это

Хорошо, теперь давайте посмотрим на аналогичный пример, но написанный уже на языке jscript.

В данном примере, мы видим, что для команды Run мы прописали второй параметр (1 – нормальный режим), если этого не сделать, то произойдет ошибка, язык jscript не дает нам возможности пропустить параметр. Также видим, что тут не нужно использовать дополнительное ключевое слово типа set.

WScript Shell Run

Хорошо, теперь давайте посмотрим на еще один пример на языке vbscript.

wscript shell что это. Смотреть фото wscript shell что это. Смотреть картинку wscript shell что это. Картинка про wscript shell что это. Фото wscript shell что это

Ну и напоследок, аналогичный пример, но уже на языке jscript:

И так, давайте все подытожим… В этой статье мы разобрали метод Run класса Wscript Shell, который позволяет запускать заданное приложение, и передавать ему нужные параметры, так, мы можем открыть текстовый редактор и вставить в него нужный текст. Аналогично, можно использовать и метод Exec, который тоже позволяет запускать исполняемый файл, но в отличии от метода Run, он позволяет контролировать работу исполняемого файла.

Спасибо за внимание. Автор блога Владимир Баталий

Источник

Wscript shell что это

wscript shell что это. Смотреть фото wscript shell что это. Смотреть картинку wscript shell что это. Картинка про wscript shell что это. Фото wscript shell что это

Объект Shell

Объект Shell. Создание объекта.

Объект Shell. Свойства.

ApplicationВозвращает объект IShellDispatch для текущего приложения.ParentВозвращает объект IShellDispatch для родительского приложения

Объект Shell. Свойство Application.

Возвращает объект IShellDispatch для текущего приложения.
Только чтение.

Объект Shell. Свойство Parent.

Объект Shell. Методы.

Объект Shell. Метод AddToRecent.

Объект Shell. Метод BrowseForFolder.

Объект Shell. Метод CanStartStopService.

Объект Shell. Метод CascadeWindows.

Упорядочение окон рабочего стола Windows каскадом.
Возвращаемого значения нет.
Параметров нет.

Объект Shell. Метод ControlPanelItem.

Объект Shell. Метод EjectPC.

Извлекает компьютер от док-станции.
Возвращаемого значения нет.
Параметров нет.
Это так же, как, в меню Пуск и выбрать Извлечь компьютер, если ваш компьютер поддерживает эту команду.

Объект Shell. Метод Explore.

может быть числом, определяющим одну из специальных папок Windows. Коды папок представлены на странице SpecialFolderConstants.

Объект Shell. Метод ExplorerPolicy.

— строка. Имя Internet Explorer policy.
Указанное имя должно быть в ветке
HKEY_CURRENT_USER\Software \Microsoft\Windows \CurrentVersion\Policies\Explorer
Если такого имени там нет, то метод возвращает NULL.

Объект Shell. Метод FileRun.

Вызов окна «Запуск программы» («Run»).
Возвращаемого значения нет.
Параметров нет
Синтаксис:
FileRun
Вызов метода приводит к тому же эффекту, что и команда меню «Пуск»-«Выполнить» («Start»-«Run»).

Объект Shell. Метод FindComputer.

Объект Shell. Метод FindFiles.

Вызов окна проводника Windows «Результаты поиска» («Find: All Files»).
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и команда меню «Пуск»-«Поиск» («Start»-«Find»).

Объект Shell. Метод FindPrinter.

Объект Shell. Метод GetSetting.

Возвращает значение указанной глобальной установки (параметра) проводника.
Синтаксис:
GetSetting( )
— целое число определяющее глобальную установку проводника.

SSF_SHOWALLOBJECTS
(0x00000001)Показывать скрытые файлы и папкиSSF_SHOWEXTENSIONS
(0x00000002)Скрывать расширения для зарегистрированных типов файловSSF_HIDEICONS
(0x00004000)Состояние пиктограмм в списке просмотра Проводника WindowsSSF_DOUBLECLICKINWEBVIEW
(0x00000080)Открыть двойным или одиночным щелчком мышиSSF_NOCONFIRMRECYCLE
(0x00008000)Подтверждение очистки корзиныSSF_SHOWSUPERHIDDEN
(0x00040000)Состояние скрывать защищенные файлы операционной системы.

Более подробно с этим материалом можно ознакомиться на сайте MSDN

Объект Shell. Метод GetSystemInformation.

DirectoryServiceAvailable
BooleanВозвращает true если служба каталогов имеетсяProcessorLevel
IntegerWindows Vista и выше. Уровень процессора. Возвращает 3, 4 или 5, для X386, x486 и процессоров Pentium-уровня, соответственно.ProcessorSpeed
IntegerСкорость процессора, в мегагерцах (МГц).ProcessorArchitecture
IntegerАрхитектура процессора.PhysicalMemoryInstalled
IntegerКоличество установленной физической памяти, в байтах.IsOS_Professional
BooleanТолько для Windows XP. Возвращает true если операционная система Windows XP Professional EditionIsOS_Personal
BooleanТолько для Windows XP. Возвращает true если операционная система Windows XP Home EditionPROCESSOR_ARCHITECTURE_AMD64
9x64 (AMD or Intel)PROCESSOR_ARCHITECTURE_IA64
6На основе Intel ItaniumPROCESSOR_ARCHITECTURE_INTEL
0x86PROCESSOR_ARCHITECTURE_UNKNOWN
0xffffНеизвестный архитектура

Объект Shell. Метод Help.

Вызов справки Windows.
Синтаксис:
Help
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и команда меню «Пуск»-«Справка и поддержка» («Start»-«Help and Support»).

Объект Shell. Метод IsRestricted.

Объект Shell. Метод IsServiceRunning.

Объект Shell. Метод MinimizeAll.

Сворачивание всех окон рабочего стола Windows.
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и команда «Показать рабочий стол» («Minimize All Windows») контекстного меню панели задач Windows или щелчок по значку «Свернуть все окна» («Show Desktop») на панели «Быстрый запуск».

Объект Shell. Метод NameSpace.

может быть числом, определяющим одну из специальных папок Windows. Коды папок представлены на странице SpecialFolderConstants.

Объект Shell. Метод Open.

может быть числом, определяющим одну из специальных папок Windows. Коды папок представлены на странице SpecialFolderConstants.

Отображает панель службы поиска.
Синтаксис:
SearchCommand
Параметров нет.
Этот метод не возвращает значение.

Объект Shell. Метод ServiceStart.

Объект Shell. Метод ServiceStop.

Объект Shell. Метод SetTime.

Вызов окна настройки времени и даты.
Синтаксис:
SetTime
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и двойной щелчок по часам в правой части панели задач Windows

Объект Shell. Метод ShellExecute.

Параметр может принимать следующие значения:

editЗапускает редактор и открывает документ для редактированияfindИнициирует поиск, начиная с указанной директорииopenЗапуск приложения. Если этот файл не исполняемый файл, то запускается связанное с ним приложение.printПечать файла.propertiesОтображение свойств объекта

Параметр может принимать следующие значения:

0Открыть приложение в скрытым окне1Открыть приложение в нормальном окне. Если окно свернуто или развернуто, система восстанавливает его исходный размер и положение.2Открыть приложение в свернутом окне3Открыть приложение в развернутом окне4Открыть приложение в окне с его последним размером и позицией5Открыть приложение в окне с его текущем размером и позицией7Открыть приложение в свернутом окне. Активное окно остается активным10Открыть приложение в окне по умолчанию для приложения.

Объект Shell. Метод ShowBrowserBar.

Метод доступен только в контексте HTML-документа!.

Объект Shell. Метод ShutdownWindows.

Вызов окна выключения и перезагрузки компьютера.
Синтаксис:
ShutdownWindows
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и команда меню «Пуск»-«Завершение работы» («Start»-«Shut Down»).

Объект Shell. Метод TileHorizontally.

Упорядочение окон рабочего стола Windows по горизонтали.
Возвращаемого значения нет.
Параметров нет.

Объект Shell. Метод TileVertically.

Упорядочение окон рабочего стола Windows по вертикали.
Возвращаемого значения нет.
Параметров нет.

Объект Shell. Метод ToggleDesktop.

Сворачивает или разворачивает все окна на рабочем столе.
Синтаксис:
ToggleDesktop
Параметром нет.
Возвращаемого значения нет.
Имитирует нажатие на значок «Свернуть все окна» в панели «Быстрый запуск» («Quick launch»).

Объект Shell. Метод TrayProperties.

Вызов окна свойств панели задач Windows.
Синтаксис:
TrayProperties
Возвращаемого значения нет.
Параметров нет.
Вызов метода приводит к тому же эффекту, что и команда «Свойства» («Properties») контекстного меню панели задач Windows.

Объект Shell. Метод UndoMinimizeAll.

Восстановление всех свёрнутых окон рабочего стола Windows..
Возвращаемого значения нет.
Параметров нет.

Объект Shell. Метод Windows.

Получение объекта «ShellWindows».
Синтаксис:
Windows
Возвращает объект «ShellWindows».
Параметров нет.

Объект Shell. Метод WindowsSecurity.

Имитирует нажатие CTRL+ALT+DELETE при использовании соединения Microsoft Terminal Server.
Синтаксис:
WindowsSecurity
Параметром нет.
Возвращаемого значения нет.

Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуетс¤ регистраци¤).

Источник

Запуск Wscript.Shell и Shell.Application. Заметки

Общих обзоров и материалов на эту тему уже достаточно, данная заметка не претендует на полноценную публикацию или исследование нюансов. Рассматривается только ОС Windows и только с точки зрения разработчика 1С, без подробностей системного администрирования и погружения в API винды. Переход по навигационным ссылкам (открытие страниц, запуск программ по протоколам) и открытие/запуск приложений по ассоциированным файлам не рассматриваем.

В общем случае разработчику доступны два командных процессора, cmd или powershell. Это именно исполнители команд, передающие далее ядру ОС более низкоуровневые команды; они доступны из консолей, пункта меню «Выполнить», они лежат в основе многих действий графических оболочек и системных менеджеров.

При этом, cmd не имеет «надстройки», и обращение к ней это всегда консольная команда. А вот powershell предоставляет оболочку над утилитой, что упрощает некоторые действия, но создаёт путаницу между собственно процессором и его «управляющим» объектом в памяти некоего процесса. Причём, эта оболочка позволяет вызвать выполнение cmd. Сложно сказать, в каких терминологических отношениях, например, находятся API-функции и процессоры, поэтому фиксируем лишь практически важные, прикладные моменты.

Важно не путать, что мы запускаем (какой процессор) и чем запускаем (какая оболочка). Под оболочкой рассматриваем СОМ-объект, созданный динамически в ходе исполнения кода на языке 1С, безотносительно, на сервере 1С это или на клиенте.

WScript.Shell

Каждый экземпляр объекта WScript автоматически создаётся сервером сценариев (CScript.exe или WScript.exe) в момент вызова конструктора. Регистрация в СОМ+ и DCOM не требуется.

Создание:
Оболочка = Новый COMОбъект(«WScript.Shell»); // во времена 8.2 это не всегда работало, требовалось «подружить» 1С и WSH

Из свойств объекта Оболочка можно выяснить путь, имя, версию сервера сценариев, что полезно при расследовании нетипичного поведения.

В некоторых случаях в передаваемой командной строке надёжнее писать путь вызова в формате 8х3, т.е. «C:\Progra

По завершении работы с Оболочка её надо принудительно приравнять Неопределено. Если объект был создан на управляемой форме, то, за исключением общеизвестного «удержания», контекст и занимаемая память по закрытии формы будут сброшены, а вот если создан из общего модуля, и сложился ещё ряд факторов, то может остаться в памяти, в т.ч. по завершении создавшего сеанса.

Оболочка, в свою очередь, позволяет создавать процессы ОС, как объекты типа WshScriptExec (некоторые источники утверждают, что может потребоваться доступ ко всем зарегистрированным классам, на практике не сталкивался).

Опять же, можно запускать консольно: cscript.exe ПутьВКавычкахКФайлуСценария (запуск сценариев пакетно). Такой подход позволяет указать, какой сервер сценариев применять (CScript.exe или используемый по умолчанию WScript.exe), можно подавить вывод диалогов и сообщений сценария.

С возможностью управления

Запуск с порождением отдельного дочернего управляемого процесса, без ожидания завершения.

Некоторые свойства:
* ProcessID – идентификатор процесса, позволяет манипулировать им в различных методах Оболочки. В диспетчере задач виден на серверных ОС.
* Status – число: если процесс выполняется, то 0, если прекратил свою работу то 1 (неважно, по какой причине прекратил).

* Arguments содержит коллекцию, позволяющую обращаться к именным и безымянным параметрам скрипта по отдельности, и многое другое. Например:

* ExitCode возвращает результат (именно и только для уже завершённого), обычно это некое число.

Во многих примерах фигурирует свойство, которое крайне нестабильно работает в 1С: Оболочка.Timeout, якобы позволяющее до запуска указать, через какое заданное в секундах время остановить процесс. Не рекомендую с ним связываться, т.к. по аналогии с обработчиком ожидания, таймер, похоже, тикает лишь при некоторых условиях, и тупит при большой нагрузке. По умолчанию время исполнения сценария не ограничено.

Процесс, запущенный Exec, разумно мониторить в цикле с задержкой, и при необходимости насильственно прерывать. Для этого используют:

* Процесс.Terminate(); // показал себя как наиболее надёжный, но, если процесс уже завершился (например, рухнул по ошибке), вызов этого метода тоже вызовет ошибку; метод позволяет завершить дочерний процесс. Процессу будет послана команда WM_CLOSE, если это не сработает, то процесс будет завершен принудительно;

Метод позволяет контролировать ход работы запущенного процесса, и запущенный сценарий является дочерним для запускающего, ему присущи те же переменные среды Windows, что и у процесса-родителя, и те же ограничения доступа. Использование метода разумно для консольных приложений, которые выполняются в консольном окне, особенно с диалогами запросов пользователю. Видимость диалога определяется запуском на клиенте 1С и совокупностью свойств сервера сценариев. Метод работает более адекватно и прозрачно при возможных ограничениях UAC.

Концепция: запустили и управляем сами: можем подождать (Sleep), можем сразу опросить, можем прервать из 1С.

Без возможности управления

Запуск внешних приложений с ожиданием завершения.

КодВозврата = Оболочка.Run(СтрокаЗапуска, СостояниеОкна, ЖдатьЗавершения);

Никаких свойств или объектов не предусмотрено.

Метод работает строго аналогично команде ОС Windows «Пуск/Выполнить», и при запуске приложения сперва идет его поиск в переменных среды, поэтому имена наиболее употребительных приложений можно указывать без пути. Метод не позволяет контролировать ход работы запущенного процесса, и дочерним для запускающего запущенный сценарий не является, а идёт как независимый. При наличии неочевидных UAC работа метода превращается в чёрный ящик.

Диалоги могут быть видны, но «живут своей жизнью», а разумнее всего применять метод к приложениям, не выводящим никакие диалоги. Замечено, что в некоторых скриптах своеобразно игнорирует «@echo off», выводя пустое окно консоли на пару секунд.

Концепция: запустили и ждём, пока сама ОС не разберётся и не вернёт управление 1С.

Shell.Application

Оболочка = Новый COMОбъект(«Shell.Application»); // если проблема с совместимостью, разрядностью или правами, то уже это действие завершится ошибкой

ShellExecute

КодВозврата = Оболочка.ShellExecute(КомандныйПроцессор, АргументыДляДействия, КаталогВыполнения, ДействиеГлагол, СостояниеОкна); // все параметры, кроме первого, необязательны

* Состояние окна интересно только на клиенте, это рекомендуемое состояние окна при выполнении, многие приложения это игнорируют, нотация аналогична вышеприведённой по vbs);

Надеюсь, очевидно, что PowerShell RunAs небезопасна, т.к. SaveCred добавляет удостоверение администратора и пароль в кэш учетных данных, и этот кэш, в принципе, можно перехватить. При этом, в ряде случаев поведение Windows Credential Manager может не удовлетворять требованиям безопасности, и тогда никакое повышение не сработает, и далеко не всегда это ловится кодом возврата, возможно, придётся смотреть журнал событий винды. За возможность запуска программ от имени другого пользователя в Windows отвечает служба вторичного входа в систему (Secondary Log-on). Если эта служба остановлена, все описанные методы с RunAs работать не будут (проверить, запущена ли служба, можно командой PowerShell вида «Get-Service seclogon»).

Общие моменты

* Всегда учитывать, что VBScript разрешает пропускать необязательные параметры методов, а JScript нет! Особенно при заимствовании кода и копи-пасте с примеров в сети)))

* Следует быть аккуратнее с расшаренными ресурсами, и с теми, запись в которые виртуализируется. У виртуальных дисков в консольных запусках порой запаздывает отклик ОС по доступу, в т.ч.отказ.

* Если прав по UAC недостаточно, то при запуске на клиенте может вылезти consent.exe с диалогом запроса подтверждения, а на сервере просто втихую не запустится. До потоков вывода и ошибок. До каких-то объектных действий. В таких случаях команду лучше обёртывать запускаемым файлом-скриптом (как делает БСП), а на сервере только смотреть журнал ОС насчёт ошибок, смотреть настройки безопасности IE (при нужде добавлять server-ivc в доверенную зону, с которой разрешён запуск исполняемых).

* Создание сом-объекта, естественно, оборачиваем в попытку-исключение и, естественно, нам доступно только позднее связывание, т.к. такие вещи как Active-Х и тем более OLE статично в объекты 1С не впихнуть. И не забываем про деструктор и уборку мусора за собой.

* Если надо содержимое консольного окна успеть посмотреть, а оно закрывается, используем (например, последней командой в скрипте) команду PAUSE, но тогда помним про особенности чтения потока вывода.

По мнению «1С»

На ИТС сравнительно мало конкретики, посвящённой особенностям работы СОМ-объектов с оболочками ОС, и она разрозненна.

Процитирую наиболее полезное: «При запуске внешней программы из кода требуется составлять строку запуска таким образом, чтобы она собиралась только из проверенных частей. если одна из частей, из которых собирается строка запуска, содержит данные, полученные из базы данных, из поля ввода на форме или прочитаны из хранилища настроек, то перед запуском программы требуется проверить, являются ли запуск безопасным. Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: «$», «`», «|», «||» «;», «&», «&&». Данное требование распространяется на все способы запуска программ.»

Разработчику доступны методы:
ФайловаяСистемаКлиент.ЗапуститьПрограмму (в клиентском коде);
ФайловаяСистема.ЗапуститьПрограмму (в серверном коде)

Как работают оба метода:
Если нужно получение потока вывода и/или потока ошибок, то объявляются временные файлы stdout.tmp и stderr.tmp, и к самой строке команды дописывается перенаправление потока в них (перезаписью). Создаётся отдельный текстовый документ с именем run.bat, и в него пишется следующее:

Файл run.bat и на сервере, и на клиенте сохраняется просто как временный файл.

Если указана необходимость дождаться завершения, то файл удаляется принудительно после запуска, не дожидаясь конца сеанса. Если ждать завершения не надо, тут может возникнуть потенциальная утечка памяти, т.к. сеанс 1С, натыкаясь на невозможность удалить порождённый им временный файл, просто игнорирует его и закрывается без лишних жалоб.
При необходимости (если дождались завершения), читаются файлы потоков (с помощью ЧтениеТекста, сразу целиком и в той же кодировке, что скрипт), и также принудительно удаляются. Опять-таки, если завершения не ждать, то и работать с файлами потоков разработчику придётся самостоятельно.

На практике подобный подход, обёртывание в bat, показал меньшую стабильность при работе в фоновых заданиях, чем прямое указание команды. Ну и, если дело на клиенте, и фокус «уплыл», и пользователь случайно нажал Ctrl+Break, то ведь оно и остановиться может.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *