Я работал над маленькой и простой программой, что я отбрасываю файлы на и, на основе правил certian, они перемещены в различные места.
Программа хорошо работает, если я не отбрасываю больше, чем несколько файлов, затем она отвечает ошибке ударом на удар (который, кажется, больше Windows, чем что-нибудь), что команда "c:\myapp.exe \file \file \file" запуска является слишком длинной.
Я понимаю, что мог настроить фоновый процесс, но я действительно предпочту, чтобы эта программа не работала в backround (где это было бы неактивно большую часть времени).
Существует ли путь вокруг этого ограничения?
Если вы хотите отбрасывать файлы в соответствии с проводником Windows, вы можете реализовать свои собственные обработчики перетаскивания в качестве обработчиков расширений оболочки, см .:
На Полное руководство идиота по написанию расширений оболочки вы найдете хорошее введение, как писать такие расширения.
Часть VI дает пример Drop Handler (для небольшого другого варианта использования, но это не имеет значения).
Что касается Drop Shell Extension Handler, ваша программа будет получать полную информацию обо всех удаленных файлах, и вам не нужно запускать дочернюю программу со всеми файлами как с параметрами, подобными командам.
Когда файлы перетаскиваются в приложение, запишите список имен файлов в текстовый файл, а затем укажите местоположение этого файла вашей программе. Целевая программа может затем прочитать этот файл и обработать его построчного. Таким образом, вы передаете только одно имя файла.
Я бы изменил приложение, чтобы получать файлы из определенного места (например, из определенной папки в файловой системе), а не указывать каждый файл в командной строке.
ОБНОВЛЕНИЕ:
Если требуется возможность перетаскивать элемент в .exe через проводник Windows для запуска приложения, как упомянул Марк, тогда вы можете поместить все свои файлы в одну папку и перетащить всю папку на файл .exe.
Я думаю, что самое простое решение - изменить ваше приложение, чтобы оно принимало каталог в качестве параметра, а не список файлов. Это позволит вам скопировать несколько файлов в один каталог. Затем вы можете перетащить папку на свой исполняемый файл. Затем он запустит команду типа «c: \ myapp.exe \ folder-with-files-in-it», которая не должна соответствовать ограничению параметра командной строки, которое вы испытываете сейчас.
Из этого блога :
Так что вам придется решить некоторые из упомянутых обходных путей (кроме того, есть еще один обходной путь в блоге msdn, на который я ссылался).
Я столкнулся с подобной проблемой, когда пытался получить данные безопасности по длинному пути. Мое решение заключалось в создании карты дисков всякий раз, когда длина пути становилась слишком большой. Посмотрите мое решение на странице Как получить сведения о безопасности для длинного пути?
Команды Unix часто имеют один или два параметра неограниченной длины. Некоторые из этих команд имеют добавленные параметры, которые могут получать эти аргументы из файла или из стандартного ввода. Итак, у вас есть одна команда, которая формирует список аргументов и либо направляет их во временный файл, либо передает их на стандартный вывод.
См. Также xargs, который может принимать список аргументов и вызывать вашу команду со всеми параметрами или группами.
Я думаю, что обработчик перетаскивания, возможно, является одним из вариантов, но он кажется довольно тяжелым.
Альтернативным решением является использование обработчика контекстного меню Explorer. С его помощью вы выделите все файлы, но вместо того, чтобы перетаскивать их, щелкните правой кнопкой мыши и выберите новый пункт меню "Отправить в ".
Когда пункт меню выбран, он передает список команд вашей программе. Есть несколько способов сделать это: