Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Ограничения на длину командной строки   Найти похожие ветки 

 
Inco   (2007-05-13 21:04) [0]

Наткнулся на такую ошибку: ярлычок на мою программу находится в меню "Отправить". Выделяем кучу файлов в Эксплорер, кликаем правой кнопкой на них выбираем "Экспорт в программу" - получаем сообщение об ошибке "Невозможно получить доступ к объекту ...".

По сути делается следующее: при вызове программы из меню "Отправить" - вызывается моя программа, а все пути к выделенным файлам передаются через командную строку. Так вот, если длина командной строки ~2000 символов или более - происходит ошибка, если меньше - все нормально. (Delphi Turbo Explorer, WinXP).

Например, выделим 20 файлов в папке "C:\Documents and Settings\VPetrov\Мои документы\Мои рисунки\Image for conversion\Ready" - получим ошибку. Если их перенести в "С:\Ready" - все работает, как часы!

Самое обидное, что ошибка происходит еще до выполнения первого оператора моей программы!

Что за такое ограничение на длину командной строки? Может кто-то сталкивался с чем-то подобным и поборол?

В Интернете пока не нашел ничего объясняющего этот эффект. Продолжаю поиски.


 
VirEx ©   (2007-05-13 21:18) [1]

а относительные пути в программе сделать слабо?
а указать папку с маской * и воспользоваться findfile слабо?


 
lookin ©   (2007-05-13 21:20) [2]

Уверен, что это баг винды такой, этого говна там навалено тоннами...


 
TUser ©   (2007-05-13 21:21) [3]

Писать конфигурационный файл (мне нравится формат ini, кому-то - xml), и прошграмме передавать имя файла в качестве единственного параметра.


 
antonn ©   (2007-05-13 21:22) [4]


> а относительные пути в программе сделать слабо?
> а указать папку с маской * и воспользоваться findfile слабо?
>

мда...


 
VirEx ©   (2007-05-13 21:26) [5]


>  [4] antonn ©   (13.05.07 21:22)
>
> > а относительные пути в программе сделать слабо?
> > а указать папку с маской * и воспользоваться findfile
> слабо?
> >
>
> мда...

что мда?

> Выделяем кучу файлов в Эксплорер, кликаем правой кнопкой
> на них выбираем "Экспорт в программу"

а что папку нельзя выделить и правой кнопкой "отправить"?
а в программе перечислять по маске стандартным API


 
@!!ex ©   (2007-05-13 21:29) [6]

> [5] VirEx ©   (13.05.07 21:26)
>
> >  [4] antonn ©   (13.05.07 21:22)
> >
> > > а относительные пути в программе сделать слабо?
> > > а указать папку с маской * и воспользоваться findfile
>
> > слабо?
> > >
> >
> > мда...
>
> что мда?
>
> > Выделяем кучу файлов в Эксплорер, кликаем правой кнопкой
>
> > на них выбираем "Экспорт в программу"
>
> а что папку нельзя выделить и правой кнопкой "отправить"?
>
> а в программе перечислять по маске стандартным API


А если нужны не все 500 файлов из папки, а 20 конкретных? Ваши предложения?


 
antonn ©   (2007-05-13 21:31) [7]


> что мда?

дык если ошибка происходит:

> Самое обидное, что ошибка происходит еще до выполнения первого
> оператора моей программы!

какая маска?


 
VirEx ©   (2007-05-13 21:37) [8]


>  [6] @!!ex ©   (13.05.07 21:29)

1) маска, дата изменения, атрибут, не достаточно?
2) GetShortPathName


 
VirEx ©   (2007-05-13 21:38) [9]


> [7] antonn ©   (13.05.07 21:31)

внимательно перечитываем

> [5] VirEx ©   (13.05.07 21:26)


 
homm ©   (2007-05-13 22:01) [10]

2 Inco:
Что такое «Экспорт в программу» ??? У меня нет такого пункта.


 
VirEx ©   (2007-05-13 22:03) [11]


>  [10] homm ©   (13.05.07 22:01)

покопайся в реестре, и появится)


 
homm ©   (2007-05-13 22:08) [12]

> покопайся в реестре, и появится)

Я серьезно, пусть сначала объяснит что это за пункт, ну или кто-то другой, а то я не въезжаю.


 
VirEx ©   (2007-05-13 22:19) [13]

так тут даже реестр править не нужно, добавь ярлык своей программы в папку C:\Documents and Settings\User\SendTo
въехал?


 
homm ©   (2007-05-13 22:41) [14]

Нет. Пункта «Экспорт в программу», ровно как и «Экспорт в…» и прочего экспорта у меня от этого не появилось.


 
Inco   (2007-05-14 10:30) [15]

Извините, что долго отсутствовал
2 homm ©   (13.05.07 22:01) [10]
> Что такое «Экспорт в программу» ??? У меня нет такого пункта.

см. VirEx ©   (13.05.07 22:19) [13]

Заходим в папку "C:\Documents and Settings\VPupkin\SendTo" делаем там ярлык на свою программу (или любую другую) (правда у меня это происходит программным путем при запуске программы).
Теперь кликаем правой кнопкой мыши на любом файле, смотрим меню "Отправить". Вуаля!

Относительные пути маски и прочее не канают, т.к. если бы ошибка происходила во время выполнения моей прграммы - было бы куда проще. Проблема именно в том, что ошибка происходит ДО вызова первого оператора моей программы. Наверное, что-то надо сделать с Виндой, или может быть, скомпилировать с какими-нибудь особыми настройками компилятора.


 
clickmaker ©   (2007-05-14 10:42) [16]


> По сути делается следующее: при вызове программы из меню
> "Отправить" - вызывается моя программа, а все пути к выделенным
> файлам передаются через командную строку

записывай пути в текстовик и передавай его путь как параметр. Наподобие list file для архиватора


 
Inco   (2007-05-14 10:52) [17]

2 clickmaker ©   (14.05.07 10:42) [16]
>записывай пути в текстовик и передавай его путь как параметр. Наподобие list file для архиватора

Я бы рад так сделать, но ошибка происходит ДО ВЫЗОВА ПЕРВОГО ОПЕРАТОРА моей программы.


 
clickmaker ©   (2007-05-14 10:55) [18]


> ошибка происходит ДО ВЫЗОВА ПЕРВОГО ОПЕРАТОРА

ну значит исправлять надо ошибку-то... причем тут ограничения?


 
Inco   (2007-05-14 10:56) [19]

Это происходит не только с моей программой, но и с другими (например, Aditor, Acrobat, Winrar и т.д.).
Получается, что это связано с Windows, а не с моей программой.

Можно ли что-нибудь сделать с настройками Windows, или это не из той области?


 
Inco   (2007-05-14 10:57) [20]

2 clickmaker ©   (14.05.07 10:55) [18]
>ну значит исправлять надо ошибку-то... причем тут ограничения?

+1000


 
clickmaker ©   (2007-05-14 11:15) [21]


> [19] Inco   (14.05.07 10:56)

в любой системе есть свои ограничения. И не только в сфере ИТ.


 
Andy BitOff ©   (2007-05-14 11:36) [22]

Это ивестное ограничение виндов. Не раз сталкивался. Решал именно передачей каталога. Причем самому этого не сделать, поэтому приходилось писать в хелпе (и в саппорте объяснять), что если надо передать программе очень много файлов, то передайте ей каталог, содержащий эти файлы. А уже в программе разбираешь, если передали каталог, то приходится искать все нужные (подходящие программе) файлы.
Ну не заставишь ведь юзера писать конфигурационный файл.


 
Inco   (2007-05-14 11:44) [23]

2 Andy BitOff ©   (14.05.07 11:36) [22]
Понятно. Спасибо.
Я думал о том, что это ограничение виндов, но надеялся, что это не так. Как описано Help для Дельфи функция CmdLine возвращает результат типа PAnsiChar, соответственно, вроде бы ограничений нет.
Но раз я не один столкнулся с такой штукой, видимо, ничего не предпримешь - придется выносить ярлык из меню "Отправить", т.к. не хочется, чтобы пользователя приходилось учить пользоваться программой.


 
Anatoly Podgoretsky ©   (2007-05-14 23:42) [24]

> Inco  (14.05.2007 11:44:23)  [23]

Открой программу с одним файлом, а потом брось в окно остальные, подобной дрессировке поддаются все пользователи


 
Andy BitOff ©   (2007-05-15 08:26) [25]

Да, забыл написать, что у моей программы была такая специфика и обойти это было нельзя. Но есть другой вариант.
Если прописываешься в shell-command (сразу по ПКМ), то метод отсылки выбранных файлов следующий. Для каждого передаваемого файла запускается новая копия приложения. Ну а тут и карты в руки. Первой запущенной копии передаются все остальные параметры. Вот в этом случае ограничений не существует.
Вроде понятно объяснил =) Проснулся только.


 
Inco   (2007-05-15 10:58) [26]

2 Anatoly Podgoretsky ©   (14.05.07 23:42) [24]
> Открой программу с одним файлом, а потом брось в окно остальные, ...

Моя программа работает в 2 режимах:
1. Можно просто ее запустить и в открывшееся окно накидать то, что тебе нужно и сколько угодно (в это же время и создается ярлык в меню "Отправить").
2. Программа не запущена, в папке выбираешь нужные тебе файлы, правой кнопкой щелкаешь, выбираешь меню "Отправить" -> "Экспорт ...", запускается программа и делает все что нужно без лишних телодвижений.

Специфика работы требует, чтобы было как можно меньше действий пользователя для получения результата, соответственно первый режим - увы! - почти никогда не будет использоваться (хотя там много фич - предпросмотр, сортировка, режимы отображения и т.п.).

А второй режим выдает ТАКУЮ ошибку, что его можно считать нерабочим (хотя в половине случаев (при малом кол-ве файлов) он будет работать).

Я думаю копать в сторону добавления пунктов в контекстное меню файлов, как это делает Winrar, Winamp и т.п. Хоть при этом программа уже не будет простая, как пробка (все таки придется писать в реестр и м.б. еще какие-то интересные фичи), но зато этот всеми желанный режим будет работать.


 
Inco   (2007-05-15 11:08) [27]

2 Andy BitOff ©   (15.05.07 08:26) [25]
> Если прописываешься в shell-command (сразу по ПКМ), ... Для каждого передаваемого файла запускается новая копия приложения.

Именно так я и делал, до того как додумался сунуть ярлык в меню "Отправить". Но мне не понравилось как это все работает - для каждого файла грузится .exe объемом 800 кБ, передает имя файла и закрывается. Для 50 файлов занимает довольно продолжительное время, комп в это время тормозит и создается впечатление, что что-то работает не так.
В общем, я от этого отказался и не хочу возвращаться к этому режиму.

2 All
Может ли кто-нибудь подсказать механику работы Winrar или Winamp:
когда выбираешь 200 файлов и по правой кнопке мыши нажимаешь "Создать архив"/"Играть в Winamp" ведь ничего не тормозит и Winrar/Winamp 200 раз не запускается, а список выбранных файлов уже находится у них внутри.
Каким образом это делается?


 
clickmaker ©   (2007-05-15 11:26) [28]


> Может ли кто-нибудь подсказать механику работы Winrar или
> Winamp:

расширения оболочки работают через DragQueryFile, как это делает, к примеру rarext.dll. Это COM-сервер


 
Inco   (2007-05-15 13:40) [29]

Нарыл информации, буду пробовать.

Спасибо всем.



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.042 c
1-1176406354
Tempp
2007-04-12 23:32
2007.06.10
Изменение разрешения экрана с сохранением позиции иконок...


15-1179052321
Zagaevskiy
2007-05-13 14:32
2007.06.10
Обучение OpenGL


1-1176385878
random(255)
2007-04-12 17:51
2007.06.10
Mathlab и Delphi


15-1179109412
Slider007
2007-05-14 06:23
2007.06.10
С днем рождения ! 14 мая


15-1179042617
Ravshan
2007-05-13 11:50
2007.06.10
C++ Файловые потоки: read, write. Странные вещи происходят.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский