AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.10.2007, 16:02   #1  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Господа, думаю многим известно что при запуске приложений командой 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  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Усли SaveTableView установить в НЕТ то вроде как вызов WSHOM не прописывается .

Так вот тих сам с собой....
__________________
Want to believe...
Старый 16.10.2007, 17:17   #3  
Голышев Михаил is offline
Голышев Михаил
Участник
 
106 / 10 (1) +
Регистрация: 03.07.2006
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  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Спасибо уже сам убедился и оттестировал . Разница еще в том откуда вызывать. Если вызывать из отчета по-строчно то вызовы прописываются в зависимости от свойств отчета . Хотя может быть есть разница в том что вызывать из AU - Run или Exec . Главное решение найдено
__________________
Want to believe...
Старый 29.04.2008, 15:06   #5  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Спасибо за идею, очень помогли!
Старый 12.05.2008, 10:49   #6  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Коллеги, подскажите как можно реализовать проверку на то что вызов wsh.Run(Command) отработал?
Сама функция имеет такие параметры:
Код:
[INT Run :=] wsh.Run(BSTR Command[, VAR VARIANT WindowStyle][, VAR VARIANT WaitOnReturn])
Командой RUN запускается command.com или внешняя программа. Как Я понимаю нужно отслеживать значение WaitOnReturn.
Старый 18.06.2008, 18:27   #7  
lsv is offline
lsv
Участник
 
15 / 10 (1) +
Регистрация: 02.08.2006
Если вернёт 0 то отработал, + надо ещё поставить WaitOnReturn :=TRUE, чтобы подождал. А ваще поищите в MSDN, там расписаны параметры RUN
Старый 19.06.2008, 13:05   #8  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
lsv, спасибо за отклик.
Есть ещё вопрос, я сделалл как Вы посоветовали, но видимо где-то ошибся. Что не так?

Код написал такой:

Код:
WindowStyle := 1;
WaitOnReturn := True;
...
  _Run := wsh.Run(WinRAR, WindowStyle, WaitOnReturn);
...
Выскакивает ошибка, см. вложение.

Спасибо.
Изображения
 
Старый 19.06.2008, 14:37   #9  
lsv is offline
lsv
Участник
 
15 / 10 (1) +
Регистрация: 02.08.2006
Что есть у вас WinRAR?
Старый 19.06.2008, 15:10   #10  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
WinRAR заведена как строковая переменная, со значением 'C:\Program Files\WinRAR\WinRAR.exe'
Старый 19.06.2008, 15:40   #11  
lsv is offline
lsv
Участник
 
15 / 10 (1) +
Регистрация: 02.08.2006
Попробуйте вот так : Run('WinRAR', WindowStyle, WaitOnReturn);
Если вы хотите использовать винрар из Navision, то стоит посмотреть структуру команды для запуска WinRar из командной строки.
Старый 19.06.2008, 16:52   #12  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
Цитата:
Сообщение от lsv Посмотреть сообщение
Попробуйте вот так : Run('WinRAR', WindowStyle, WaitOnReturn);
Если вы хотите использовать винрар из Navision, то стоит посмотреть структуру команды для запуска WinRar из командной строки.
Ну так совсем неправильно. ('WinRar')
Параметры запуска WinRar'a нужно добавить в текстовую переменную при таком подходе.
И у него параметры предназначены для управления степенью сжатия и пр., но никак не для ожидания завершения работы.
Тут надо в другую сторону копать.
Старый 19.06.2008, 17:07   #13  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Да, использовать 'WinRAR' не совсем корректно.
Проблема в другом.
Старый 19.06.2008, 17:10   #14  
.Quattro. is offline
.Quattro.
Участник
Лучший по профессии 2009
 
194 / 22 (1) +++
Регистрация: 22.05.2006
В кавычки возьмите путь к 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  
lsv is offline
lsv
Участник
 
15 / 10 (1) +
Регистрация: 02.08.2006
Я же написал, что нужно смотреть параметры запуска.
В данном случае, было написано, что WinRar - строковая переменная, в которой путь к экзешнику. Если стоит задача просто запустить программу, то 'WINRAR' способ добиться запуска. Если необходимо использовать WinRAR по назначению, то нужно просто сформировать команду. Список команд и ключей есть в хелпе. Когда будете формировать команду, путь к экзешнику нужно заключить в кавычки.
Собственно ошибка в том и заключалась, в неправильном представлении BSTR Command
Вот полезная инфа по описанию Run
http://www.script-coding.info/WSH/WshShell.html#3.4.
Старый 19.06.2008, 18:20   #16  
.rejector._imported is offline
.rejector._imported
Участник
 
47 / 10 (1) +
Регистрация: 08.04.2004
Коллеги, спасибо огромное. Вы действительно оказались правы.
Путь к WinRar нужно было взять в кавычки. Ранее, когда использовал SHELL для выполнения внешнего приложения, он не требовал путь с кавычками, поэтому так и оставил.
Спасибо ещё раз!
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:37.