1С запуститьприложение не работает

Область применения: управляемое приложение, обычное приложение.

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

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

  • КомандаСистемы ( , )
  • ЗапуститьПриложение ( , , , ) ;
  • НачатьЗапускПриложения ( , , , );
  • ПерейтиПоНавигационнойСсылке ( );
  • Использование COM объектов " Wscript.Shell " и " Shell.Application ".

2. При использовании Библиотеки стандартных подсистем для запуска внешних программ требуется использовать следующий программный интерфейс:
2.1. Для того чтобы открыть проводник с фокусировкой на указанном файле, использовать процедуру ФайловаяСистемаКлиент.ОткрытьПроводник .
Например:

2.2. Для того чтобы открыть файл в программе просмотра, ассоциированной с расширением файла, использовать процедуру ФайловаяСистемаКлиент.ОткрытьФайл . Она исключает запуск исполняемых файлов (например, *.exe, *.bin, *.apk).
Например:

2.3. Для того чтобы открыть веб-страницу в браузере, запустить программу по протоколу (например, mailto:, skype:, tel: и.т.д) или открыть навигационную ссылку информационной базы следует использовать процедуру ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку . При этом в веб-клиенте пользователю будет предложено установить расширение для работы с файлами в тех случаях, когда оно необходимо для выполнения операции.
Например:

ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("https://1c.ru");
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("e1cib/navigationpoint/startpage"); // начальная страница.
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("mailto:help@1c.ru");
ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку("skype:echo123?call");

В то же время, для открытия проводника или файла в программе просмотра не следует формировать ссылку по протоколу file://, для этого следует использовать одну из процедур: ОткрытьПроводник (см. п. 2.1) или ОткрытьФайл (см. п. 2.2).

Читайте также:  1С передать массив в запрос

2.4. Для того чтобы:

  • запускать файлы на исполнение (например, *.exe, *bat),
  • использовать системные команды (например, ping, tracert или traceroute, обращаться к rac-клиенту),
  • выполнять команды на сервере,
  • а также получать код возврата и значения потоков вывода (stdout) и ошибок (stderr)

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

Пример запуска с ожиданием завершения и получения кода возврата:

ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;

Результат = ФайловаяСистема.ЗапуститьПрограмму(
"ping 127.0.0.1 -n 5", ПараметрыЗапускаПрограммы);

КодВозврата = Результат.КодВозврата;
ПотокВывода = Результат.ПотокВывода;
ПотокОшибок = Результат.ПотокОшибок;

3. Для выполнения команды, требующей запуск внешней программы в режиме наивысших прав (например, в ОС Windows – с отображением запроса повышения прав UAC), необходимо:

  • реализовывать ее на управляемой форме в виде кнопки или пункта меню;
  • а на самой кнопке, начинающей выполнение действия, отобразить значок щита (общая картинка ЗначокЩита из Библиотеки стандартных подсистем ).

Выполняет запуск приложения Windows

Синтаксис

Процедура ЗапуститьПриложение() имеет следующий синтаксис:

А также альтернативный англоязычный синтаксис:

Параметры

Описание параметров процедуры ЗапуститьПриложение() :

Имя параметра Тип Описание
СтрокаКоманды Тип строковое выражение, содержащее путь к запускаемой программе или имя файла для запуска ассоциированного внешнего приложения
Жирным шрифтом выделены обязательные параметры

Описание

Процедура ЗапуститьПриложение() выполняет запуск внешнего приложения ОС Windows минуя командный интерпретатор MS DOS. После запуска приложения управление возвращается в программу 1С, не дожидаясь завершения работы внешнего приложения.

В отличие от процедуры КомандаСистемы() может открыть файл с помощью ассоциированного для данного вида файлов приложения (при условии, что оно установлено на компьютере пользователя).

Если в параметре СтрокаКоманды не указан полный путь к вызываемой программе, ОС Windows самостоятельно выполняет поиск в следующем порядке:

  • Текущий каталог программы
  • Каталог Windows
  • Системный каталог Windows
  • Каталоги, перечисленные в переменной среды исполнения PATH
Читайте также:  Что такое null в айфоне

Пример использования

Пример кода с использованием процедуры ЗапуститьПриложение() :

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

Таким же способом можно выполнять запуск любого другого приложения, явно указав путь к исполняемому EXE-файлу.

После выполнения этой строчки кода будет запущено стандартное приложение Windows – "Блокнот".

Использовать этот метод глобального контекста больше имеет смысл на стороне клиента (тонкого или толстого), так как в абсолютном большинстве случаев после запуска приложения работать с ним из 1С:Предприятия не представляется возможным. Т.е. после открытия браузера обрабатывать его события или получать из него данные платформа не сможет.

Но выполнять взаимодейтсвие с запущенным таким способом приложением все же можно! Например, выполнив запуск ожидаем когда запущенное приложение сформирует ответный файл и затем читаем его. Если использовать метод "ЗапуститьПриложение()", то нам придется проверять наличие ответного файла в цикле и в случае появления доступа к этому файлу – обработать его.

Рациональней было бы запустить приложение, дождаться завершения его выполнения и затем выполнить все необходимые действия. А если запуск выполняется на клиентской машине, то показывать окно приложения вообще может оказаться не обязательно.

Для этих целей можно использовать COM-объект "WScript.Shell":

А) – команда системы (путь к исполняемому файлу или любая другая команда в формате DOS).

Б) – вариант показа окна приложения. Указывать не обязательно. Возможные значения:

1 – Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется при первом открытии окна программы.
2 – Активизирует окно в свернутом режиме.
3 – Активизирует окно и разворачивает на весь экран.
4 – Показывает окно в его новом размере и положении. Активным остается текущее окно.
5 – Активизирует окно и показывает его в текущем размере.
6 – Минимизирует окно и активизирует следующее на панеле задач.
7 – Показывает окно как минимизированное. Активное окно остается активным.
8 – Показывает окно в его текущем состоянии. Активное окно остается активным.
9 – Активизирует и показывает окно. Если окно минимизировано или максимизировано, система восстанавливает его к оригинальному размеру и положению. Используется для восстановления минимизированного окна.
10 – показывает окно в том-же состоянии, что и окно вызывающей программы.

Читайте также:  Установка хакинтош рядом с windows 10

В) – нужно ли ожидать завершения команды: 0 – не нужно ждать завершения выполнения команды, 1 – ждать окончания выполнения команды.

Вот так выглядит запуск приложения "Блокнот" этим способом:

Но опять же, ожидания завершения работы приложения не будет. Для этого третий параметр нужно выставить в значение 1.

Пример использования COM-объекта "WScript.Shell" можно посмотреть в обработке "Yandex.Wordstat", где с его помощью запускается утилита отправки JSON-запроса через Yandex.API.

Минусом второго способа является его не универсальность, ведь работа COM-объекта возможна только для случаев, когда платформа (или сервер 1С:Предприятия) запущены под управлением операционной системы Windows.

Оцените статью
Добавить комментарий

Adblock detector