Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
поиском такой темы не нашел, но она наверняка есть
Вчера сидели целый день с такой глупостью Некий сишный екзешник вызывает фоксовый и передает 5 параметров Первые 4 короткие. А последний некое условие для выборки длинное. Выяснилось, что при увеличении этого параметра на си в фокс он не приходит даже урезанным. Пока он меньше некой длины, все хорошо, а как выше некого предела,так все. Если фоксовый модуль вызвать из самого фокса через do myexe.exe with .....и все эти параметры, даже последний раза в 2 увеличить Все ок. Но ни RUN /7 myexe.exe ..... ни shellexec из фокса уже также не пропускают последний параметр, он просто не приходит даже обрезанным. Ясно, что это ограничение общей длины параметров, передаваемых в exe Вчера уже дома мне показалось, что решение есть, отдать последний параметр как ссылку То есть в вызывающей задаче объявить переменную, присвоить все это длинное выражение, и отдать на исполнение. Пришел на работу, как ни изгилялся, ничего не добился Так и приходит имя переменной, а не ее содержание. В целом задачу решили через некую таблицу на Оракл,где лежат длинные условия,а пятым параметром отдаем просто ключ. Просто стало любопытно, почему такие дрова Скажем на оракл в запросе можно подсунуть нечто вроде ?@var, где переменная объявлена в фоксе до такого вызова, а в Оракл она просто присваивается,а тут нет.Особо непонятно, что фоксовая функция с shellexec открывает любые файлы по очень длинным путям. То есть, вроде как и нет у нее ограничения на длину параметра. Исправлено 1 раз(а). Последнее : boba, 10.04.19 09:27 |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
pasha_usue Сообщений: 3647 Откуда: Е-бург Дата регистрации: 06.10.2006 |
|
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Общая длина параметров, на которой все рухнуло
250. CUSL= "(like('76*',d_schet).or.like('76*',k_schet)).and.d_schet!='76330'.and.k_schet!='76330'.and.d_schet!='76194'.and.k_schet!='76194'.and.d_schet!='76294'.and.k_schet!='76294'.and.d_schet!='76340'.and.k_schet!='76340'.and.id_oracle=0" CMDD = "RUN /7 U:\ARM_SZAK\cli_k\prg\vhdimport.exe WITH 'erpwork', '1', '2019-04', '76' "+'@CUSL' выше не работает и без @ Ниже работает и с @ и без **DO U:\ARM_SZAK\cli_k\prg\vhdimport.exe WITH 'erpwork','1','2019-04','76',CMDD *strrr=['erpwork','1','2019-04','76',"(like('76*',d_schet).or.like('76*',k_schet)).and.d_schet!='76330'.and.k_schet!='76330'.and.d_schet!='76194'.and.k_schet!='76194'.and.d_schet!='76294'.and.k_schet!='76294'.and.d_schet!='76340'.and.k_schet!='76340'.and.id_oracle=0"] *!***** strrr=[erpwork 1 2019-04 76 @CUSL] Не работает, но если последний параметр укоротить цифр на 10, то работает =runanydoc('', 'vhdimport.exe',strrr) FUNCTION runanydoc LPARAMETERS tcDocument, cFileName, cParameters local lnResult DECLARE INTEGER ShellExecute ; IN SHELL32.dll ; INTEGER nWinHandle, ; STRING cOperation, ; STRING cFileName, ; STRING cParameters, ; STRING cDirectory, ; INTEGER nShowWindow **retreive the main VFP window handle (this handle is used by ShellExecute) DECLARE INTEGER FindWindow ; IN WIN32API ; STRING cNull, ; STRING cWinName SET STEP ON[ lnResult=ShellExecute(FindWindow( 0, _SCREEN.caption), "Open", cFileName, cParameters, "", 1) **Error messages if the return value is < 32 IF lnResult < 32 DO CASE CASE lnResult=2 Wait wind "Iaaa?iue aea oaeea ." CASE lnResult=31 Wait wind "Iao ia?aaio?eea aey aua?aiiiai oeia oaeeia." CASE lnResult=29 Wait wind "Iaaicii?ii caionoeou Excel." CASE lnResult=30 Wait wind "I?eei?aiea o?a caiouaii." ENDCASE ENDIF Исправлено 1 раз(а). Последнее : boba, 10.04.19 13:05 |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
"" Существует некоторая путаница в цифрах максимальной длины имени файла в файловой системе NTFS, которую вы можете обнаружить в различных источниках. Для начала, есть абсолютный предел, введенный Windows API, и он составляет 260 символов. Тем не менее, практический пределе меньше, чем 260 символов.
Может это и параметров в вызове касается... Где-то в API счетчик 1-байтовый. "В лоб" можно попробовать за gzip-ить строку, превратить в BASE64 и передать в качестве параметра. На стороне фокса раз-BASE64-gzip-ить... Будет работать, до каких-то длин немного побольше. Эксперимент: Исправлено 1 раз(а). Последнее : of63, 10.04.19 19:25 |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
За совет с архиватором спасибо, вряд ли разрешат.
|
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
DO myprog.exe WITH ...
вообще не запускает нового процесса - это то же самое что и запуск процедуры в рамках текущей программы. А что фокс не принимает слишком длинную строку запуска - ну так, видать, он написан. Вероятно в стартовом коде (сишном) не предполагается что будет использована командная строка длиннее 250 символов. Это НЕ системное ограничение - чисто фоксовая особенность. Проще всего, вероятно, скидывать все эти параметры-портяники во временный файл, а собственно "параметром" при запуске фоксового exe передавать имя этого файла. Если уж по любому нужно "через параметры" то попробуй через АПИ функции их получать. Правда фокс может просто не дойти до запуска собственно фоксового кода - свалится рантайм ещё до начала работы собственно фоксовых команд и всё. ------------------ WBR, Igor |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Правда фокс может просто не дойти до запуска собственно фоксового кода - свалится рантайм ещё до начала работы собственно фоксовых команд и всё.
Бред какой-то Через временный файл все он передаст. Кстати, есть прикольное свойство в винде, создаваемого файла. Что мол, когда все ссылки на него закроются, то файл самоуничтожится. Это оказалось неприменимо нигде (нигде этого флага в "рабочих" прогах не встречал. Поискал - не нашел спьяну) |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Рома Сообщений: 1079 Дата регистрации: 06.06.2001 |
Это глюк фокса.
Проще всего убрать параметры в главном файле exe и прочитать их вручную
|
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Дмитрий Петров Сообщений: 3066 Откуда: Пермь Дата регистрации: 09.07.2001 |
Или из файла прочитать параметры. Filetostr()
|
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Рома.
Спасибо, ваш совет сработал для варианта запуска shellexec Действительно все аргументы удалось вернуть. run /7 somexe.exe ..... с теми же параметрами не получилось, ну и бог с ним. Тут пробовал и апострофы в аргументы добавлять и запятые между аргументами. |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
У меня без param фокс ругается, а с ним может упасть напрочь... вроде как общая длинна команды с параметрами в районе 255 символов валит рантайм в ошибку (больше и меньше - проходят, хотя,естественно, в сами "параметры" main-а не попадают данные).
------------------ WBR, Igor |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Игорь.
У меня Фокс не валится и не дает никакой ошибки Просто при увеличении длины последнего параметра его тип становится на входе U-unknown Все выглядит так, ка будто снаружи это параметр и не передавался. Больше того, функция parameters() дает 4, а не 5 аргументов. Все-таки в моем возрасте память уже не та. Я порылся в своих материалах по курсах по Фоксу, что я иногда читал в Интерфейсе и на выезде Так в разделе winipi есть программа очень похожая на ту, что привел Роман. Видать я сам когда-то давно знал про эту проблему и было ее решение. Судя по тексту программы я ее взял где-то на фоксовых сайтах, а не писал сам. |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Я именно про вариант с АПИ. Но чтобы он заработал, нужно чтобы начал исполняться фоксовый код, а он при определённых условиях (какие именно - я указал) вообще не начинает работать.
Да и зачем насиловать и себя и фокс, если через файл передавать набор параметров не составляет никакого труда? ------------------ WBR, Igor |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
of63 Сообщений: 25161 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
|
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Игорь. Почти у любой задачи есть много решений,
но это у тех, кому нужно сделать. В данном случае вопрос человеческих отношений и психологии. Тут ни апи ни файлы не помогут. Исправлено 2 раз(а). Последнее : boba, 13.04.19 19:08 |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Всегда можно сделать прослойку, хотя бы и банальный cmd который эти самые параметры командной строки примет и поместит в файл, или там в реестр, чтобы соответствующие дебилоиды ничего и не увидели
------------------ WBR, Igor |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
boba Автор Сообщений: 6269 Откуда: Медвежьи озера- Дата регистрации: 26.03.2001 |
Часть на си, которая вызывает фоксовую прогу делал другой человек.
С этим проблемы, а не с передачей файлов или чем-то другим. |
Re: Общая длина параметров, передаваемая EXE | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Владимир какая разница что и как там кто-то делал, если можно поставить между этой программой и твоей прослойку и то что она передаёт в параметрах запуска поместить туда, откуда фоксовая программа уже без проблем это достанет?
Не требуется вообще трогать эту сишную прогу. ------------------ WBR, Igor |
© 2000-2024 Fox Club  |