This is topic Bat'аника в TraceMode 6 in forum Редактор проекта TRACE MODE 6 / at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000456.html

Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Здравствуйте.

Решил поделиться со всеми вами определенной информацией, а также спросить совета знающих.

Потребовалось запустить внешний exe файл. С помощью канала Call типа Exec данное действие успешно реализуется.
Но! внешнее приложение - программа нашего программиста, и для ее успешного старта требуется обнаружение (ею самой) нескольких файлов в родной директории. При запуске с ТМ программа ругается на то, что не может запуститься, ибо не видит того, сего и третьего. Ладно, оставим это на совести разработчика, так как я нашел другое вполне приемлемое решение (так мне казалось сначала): запустить батник, который уже в свою очередь запустит исполняемое приложение.

Создал канал Call такой конфигурации:

ИМЯ: c:\windows\system32\cmd
КОММЕНТАРИЙ: "/k c:\test\ckyokean\start.bat"
ТИП: Output
ПАРАМЕТР: 1

Содержание bat файла:

start program.exe
exit

Вызов происходит по нажатию кнопки и записи 1 в канал.

Все успешно загружается (и в cmd.exe и в ТМ)...

Однако проблема в том, что путь до start.bat на самом деле другой и содержит пробелы! Раз пробелы есть, значит надо ставить кавычки, скажете вы и будете правы. Пробуем:

КОММЕНТАРИЙ: "/k "c:\program files\ckyokean\start.bat""

- не работает (оно и понятно, надо ведь экранировать)... а если так (без начальных кавычек):

КОММЕНТАРИЙ: /k "c:\program files\ckyokean\start.bat"

- тоже не работает.

Прошу обратить внимание, что в командной строке (на чем я и тестировал) все работает, то есть тест я проводил следующим образом:

cmd /k "c:\program files\ckyokean\start.bat" - так работает

Ладно, я подумал, что может ТМ ставит кавычки при перенесении комментария и без них не будет работать. Добился работоспособности в cmd.exe следующим образом:

cmd "/k ""c:\program files\ckyokean\start.bat"

- все работает. Перенес в комментарий строку

"/k ""c:\program files\ckyokean\start.bat"

- не работает!

Пробовал и так:

"/k ""c:\program files\ckyokean\start.bat"""

и так (уже показывал):

/k "c:\program files\ckyokean\start.bat"

- не работает.

Собственное вопрос такой, каким образом ТМ формирует строку запуска exe файла (в моем случае это cmd.exe) и передачу аргументов файлу? С кавычками или без? Как заставить работать данную схему в случае, когда путь к файлу указан с пробелами.

P.S. В большинстве случаев ошибка такая: 'C:\Program' is not recognized as an internal or external command,operable program or batch file.
 
Posted by Romсheg (Участник № / Member № 3792) on :
 
ТМ6 вообще не управляет папками, поэтому при запуске внешнего ПО в системе текущей папкой всегда является папка узла, который запустили в рантайме. Совет вашему программисту - пусть прописывает в явном виде пути к своим конфигам, иначе ТМ ему все это перевернет. [Улыбка / Smile]
Вообще насчет запуска внешнего - тут правила такие (некоторые по личному опыту):
1) Пути с пробелами - берите в кавычки
2) Старайтесь избегать длинный путей - ТМ не умеет работать с длинными путями более 39 символов. [Улыбка / Smile] Старайтесь даже сам ТМ не ставить в директорию по умочанию, чем ближе положешь, тем быстрее возьмешь (в смысле проще потом работать будет и настраивать).
3) Замечен такой интересный факт - в некоторых случаях приложение приходилось по имени приводить к 8-символьному формату, потому как длинное имя ехе-шника не воспринималось ни в какую.
4) Все что запускаете из проекта - лучше кладите в отдельную папку, путь к которой прописывайте в PATH, так проще и проект потом будет настроить и вообще не мучиться с путями, потому как они будут уже на уровне самой ОС.

[Пдмигивание / Wink]
 
Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Romсheg, спасибо за комментарии.

Да, я уже понял, что текущая директория устанавливается самим TM, так что тут все понятно.
1) Так вот и не получается тут эта схема, причем в CMD.EXE все работает, а в ТМ видимо своя особенность. Все таки хотелось видеть комментарий группы разработки.
2) Соглашусь, хотя обычно ставлю в директорию по-умолчанию, так как считаю, что программы должны корректно работать и с пробелами и с длинными путями (раз уж в инсталляторе такой путь прописан). Кроме того, путь установки наших программ (а здесь инсталлятор) тоже имеет в себе "Program Files". Но, если не получится заставить работать в таком варианте, придется ставить в папку C:\TraceMode\ [Улыбка / Smile]
3) Такой вариант не пробовал, но если ничего не останется, ...
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
CALL_EXEC. Запуск bat-файлов.
a. ПАРАМЕТР=1
b. Имя канала=C:\Windows\System32\cmd.exe
c. Комментарий=/c start <путь>\<name>.bat
d. Последней строкой в bat-файле должна быть: EXIT.
 
Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Попробовал. Не работает.

Пробовал следующие варианты:

1. Комментарий=/c start <путь с пробелами>\<name>.bat
2. Комментарий=/c start "<путь с пробелами>\<name>.bat"
3. Комментарий="/c start ""<путь с пробелами>\<name>.bat"

Ошибки разные. Не знаю, может у вас и получилось, но у меня не в какую.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Задайте путь без пробелов.
Комментарий=/c start <путь без пробелов>\<name>.bat
Перепроверено в релизе 6.07.
 
Posted by Сергей Александрович (Участник № / Member № 2884) on :
 
Так понятно, что будет работать без пробелов [Улыбка / Smile] Я же это написал еще в первом сообщении.
Ясно, что заставить работать это нельзя штатными средствами.

Выхода два: либо подключить DLL библиотеку, либо задать путь без пробела.

Спасибо за ответы.
 
Posted by Rinag (Участник № / Member № 4499) on :
 
Аналогичная задача по созданию Helpa. Сам Help в формате pdf. Acrobat Reader расположен в C:\Program Files\Adobe\Reader 9.0\Reader. Добывил в path=C:\Program Files\Adobe\Reader 9.0\Reader; C:\WINDOWS\system32. Прописал в CALC_EXEC
Имя: AcroRd32.exe
Комментарий: "help.pdf"
Тип вызова: Exec
Параметр:1
Период: 3 цикл CALC.
У меня 2 вопроса, почему не запускается даже Acrobat reader, не говоря уж о том что сам файл не подгружается в нее. И как реализовать вызов по событию, мне не нравится, что канал вечно с периодом 3 calc крутится в памяти.
 
Posted by Rinag (Участник № / Member № 4499) on :
 
Экмперементировал и с cmd.exe. Пока не пропишу весь путь к нему или не положу cmd.exe в корень узла, так же не запускается.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Почему ОС не запускает файлы при указании доступа к нми в переменной path, надо смотреть в настройках ОС. Trace Mode 6 передает в ОС имя файла, дальше - функции ОС.

Чтобы функция запуска приложения не реализовывалась с каждым своим периодом, сделайте канал CALL.EXEC типа OUT и запускайте ее интерактивно или программно.
 
Posted by Romсheg (Участник № / Member № 3792) on :
 
2AdAstra Technical Support:
В том и дело, что в ОС некорректно строку запуска передает сам ТМ6.

[ 07.07.2011, 17:33: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В данном случае речь идет о передаче в ОС запускаемого файла без указания пути.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2