Форум: "Прочее";
Текущий архив: 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