OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

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

Open kain559 opened this issue 6 years ago • 6 comments

Здравствуйте! У меня установлена 64 разрядна Windows, onescript 32. При использовании команды ЗапуститьПриложение("C:\Program Files\Internet Explorer\IEXPLORE.EXE") выходит ошибка: Внешнее исключение (System.ComponentModel.Win32Exception): Не удается найти указанный файл} При этом платформа (32 разрядная) 1С может запустить это приложение. Может подскажете как быть?

kain559 avatar Aug 09 '19 02:08 kain559

Может подскажете как быть?

Пока не знаю, надо думать. @dmpas @nixel2007 есть идеи?

@kain559 Файл по пути "C:\Program Files\Internet Explorer\IEXPLORE.EXE" точно существует?

EvilBeaver avatar Aug 09 '19 07:08 EvilBeaver

Проблема из-за пробела в пути. На данный момент метод ExtractExecutableName возвращает в качестве имени кусок пути до первого пробела, то есть C:\Program.

Как обход, можно запускать так ЗапуститьПриложение("""C:\Program Files\Internet Explorer\IEXPLORE.EXE"" ya.ru"); или так ЗапуститьПриложение("IEXPLORE.EXE ya.ru");

Действительно, платформа 1С умеет корректно отличать пробел межу запускаемым файлом и аргументами от пробела в пути файла. То есть такой запуск проходит корректно: ЗапуститьПриложение("C:\Program Files\Internet Explorer\IEXPLORE.EXE ya.ru"); Но не понятно, как это повторить в оскрипте.

witales avatar Nov 05 '19 22:11 witales

Платформа 1С (если нет кавычек) последовательно ищет слева направо в переданной в ЗапуститьПриложение() строке пробел и слэш и проверяет существование файла. В данном примере: C:\Program C:\Program.exe C:\Program Files\Internet C:\Program Files\Internet.exe C:\Program Files\Internet Explorer\iexplore.exe Как только файл найден, он вызывается, а остаток строки передается как параметр. Если файл не найден, то всё равно выполняется попытка запуска со всей строкой. В ExtractExecutableName() такое тоже можно сделать.

Mr-Rm avatar Nov 06 '19 07:11 Mr-Rm

Хитро. Только вместо поиска exe надо взять список допустимых разрешений, которые считаются исполняемыми файлами в командной оболочке. В винде, кажется, этот список лежит в переменной среды

nixel2007 avatar Nov 06 '19 07:11 nixel2007

Расширения запускаемых - в PATHEXT. 1C это игнорирует, и получается нестандартное поведение: ЗапуститьПриложение("c:\Windows\System32\slmgr"); открывает папку в проводнике вместо того, чтобы запустить c:\Windows\System32\slmgr.vbs КомандаСистемы("c:\Windows\System32\slmgr"); вызывает скрипт В Oscript отсутствует КомандаСистемы() ?!

Mr-Rm avatar Nov 06 '19 08:11 Mr-Rm

В Oscript отсутствует КомандаСистемы()

Да, и возможно, даже есть на это issue. А может и нет...

EvilBeaver avatar Nov 07 '19 11:11 EvilBeaver