16.10.2007, 16:02 | #1 |
Участник
|
Господа, думаю многим известно что при запуске приложений командой SHELL в ZUP-файл записывается вызов этой команды. Вот информация из справки по SHELL:
The SHELL function has been designed so that each user can create a list of trusted executables. This list is maintained in the user’s zup file. The way this function works depends on whether the executable is given as a text constant or as a variable. и все бы ничего, если вы вызываете одно и тоже приложение с одним и тем же параметром. В зависимости от способа вызова SHELL система или спросит про добавление в список приложений или просто сама добавит. Дело в том что мне приходится вызывать одно и тоже внешнее приложение с очень большим количеством параметров и все подобные вызовы пишутся в ZUP файл. В итоге Nav-клиент тратит кучу времени на поиск в памяти очередной командной строки, при этом zup файл постоянно "растет". Вопрос знатоки думаю уже смогут сформулировать самостоятельно . Какая красивая альтернатива SHELL может быть использована в подобном случае? При этом совсем не хочется городить огород с генерацией запускных файлов. PS На данный момент остановился на использовании Automation Windows Script Host Object Model.Shell - Run однако и подобный вызов пишется в zup файл только уже с более кодированном виде.
__________________
Want to believe... |
|
16.10.2007, 16:25 | #2 |
Участник
|
Усли SaveTableView установить в НЕТ то вроде как вызов WSHOM не прописывается .
Так вот тих сам с собой....
__________________
Want to believe... |
|
16.10.2007, 17:17 | #3 |
Участник
|
Nav 4.0 SP3
au Automation 'Windows Script Host Object Model'.WshShell au.Exec(STRSUBSTNO('notepad.exe %1',RANDOM(10000))); Вызвал в цикле 1000 раз - ZUP файл поменялся, но размер остался прежним - около 1MB |
|
17.10.2007, 13:28 | #4 |
Участник
|
Спасибо уже сам убедился и оттестировал . Разница еще в том откуда вызывать. Если вызывать из отчета по-строчно то вызовы прописываются в зависимости от свойств отчета . Хотя может быть есть разница в том что вызывать из AU - Run или Exec . Главное решение найдено
__________________
Want to believe... |
|
29.04.2008, 15:06 | #5 |
Участник
|
Спасибо за идею, очень помогли!
|
|
12.05.2008, 10:49 | #6 |
Участник
|
Коллеги, подскажите как можно реализовать проверку на то что вызов wsh.Run(Command) отработал?
Сама функция имеет такие параметры: Код: [INT Run :=] wsh.Run(BSTR Command[, VAR VARIANT WindowStyle][, VAR VARIANT WaitOnReturn]) |
|
18.06.2008, 18:27 | #7 |
Участник
|
Если вернёт 0 то отработал, + надо ещё поставить WaitOnReturn :=TRUE, чтобы подождал. А ваще поищите в MSDN, там расписаны параметры RUN
|
|
19.06.2008, 13:05 | #8 |
Участник
|
lsv, спасибо за отклик.
Есть ещё вопрос, я сделалл как Вы посоветовали, но видимо где-то ошибся. Что не так? Код написал такой: Код: WindowStyle := 1; WaitOnReturn := True; ... _Run := wsh.Run(WinRAR, WindowStyle, WaitOnReturn); ... Спасибо. |
|
19.06.2008, 14:37 | #9 |
Участник
|
Что есть у вас WinRAR?
|
|
19.06.2008, 15:10 | #10 |
Участник
|
WinRAR заведена как строковая переменная, со значением 'C:\Program Files\WinRAR\WinRAR.exe'
|
|
19.06.2008, 15:40 | #11 |
Участник
|
Попробуйте вот так : Run('WinRAR', WindowStyle, WaitOnReturn);
Если вы хотите использовать винрар из Navision, то стоит посмотреть структуру команды для запуска WinRar из командной строки. |
|
19.06.2008, 16:52 | #12 |
Участник
|
Цитата:
Параметры запуска WinRar'a нужно добавить в текстовую переменную при таком подходе. И у него параметры предназначены для управления степенью сжатия и пр., но никак не для ожидания завершения работы. Тут надо в другую сторону копать. |
|
19.06.2008, 17:07 | #13 |
Участник
|
Да, использовать 'WinRAR' не совсем корректно.
Проблема в другом. |
|
19.06.2008, 17:10 | #14 |
Участник
|
В кавычки возьмите путь к WinRar'у
Код: CREATE(wsh); WinRar := '"C:\Program Files\WinRAR\WinRAR.exe"'; WinStyle := 1; Wait := TRUE; _Run := wsh.Run(WinRar, WinStyle, Wait); CLEAR(wsh); |
|
19.06.2008, 17:32 | #15 |
Участник
|
Я же написал, что нужно смотреть параметры запуска.
В данном случае, было написано, что WinRar - строковая переменная, в которой путь к экзешнику. Если стоит задача просто запустить программу, то 'WINRAR' способ добиться запуска. Если необходимо использовать WinRAR по назначению, то нужно просто сформировать команду. Список команд и ключей есть в хелпе. Когда будете формировать команду, путь к экзешнику нужно заключить в кавычки. Собственно ошибка в том и заключалась, в неправильном представлении BSTR Command Вот полезная инфа по описанию Run http://www.script-coding.info/WSH/WshShell.html#3.4. |
|
19.06.2008, 18:20 | #16 |
Участник
|
Коллеги, спасибо огромное. Вы действительно оказались правы.
Путь к WinRar нужно было взять в кавычки. Ранее, когда использовал SHELL для выполнения внешнего приложения, он не требовал путь с кавычками, поэтому так и оставил. Спасибо ещё раз! |
|