Какая обработка / проверка выполняется над аргументами командной строки перед началом процесса? - PullRequest
4 голосов
/ 07 января 2011

У меня небольшое приложение WPF, которое принимает пути к файлам в качестве аргументов командной строки.

Если пользователь перетаскивает слишком много файлов с длинными путями, оно превысит максимальную длину командной строки, по крайней мере, на 32-bit WinXP.

В результате появляется окно с сообщением:

Windows не может получить доступ к указанному устройству, пути или файлу.У вас могут отсутствовать соответствующие разрешения для доступа к элементу.

Это похоже на ошибку

Имя файла или расширение слишком длинное.

В этих случаях кажется, что процесс никогда не запускается.

Я думал, что перетаскиваемые файлы фактически просто передают свои пути в виде строк, но эти ошибки указывают на обратное, и что некоторая частьOS / shell / framework выполняет какую-то проверку, основанную на том факте, что это пути к файлам / каталогам, и когда это не удается, процесс не запускается.

Кто-нибудь знает, что происходит между временем этой команды?строковые аргументы передаются в .NET .exe и когда этот .exe запускается, если вообще?

1 Ответ

4 голосов
/ 07 января 2011

Ответ на ваш вопрос: список путей превышает максимальный размер командной строки, поэтому ваша программа не может запуститься.

Операционная система создает командную строку перед запуском вашего процесса, поскольку эта информация требуетсяво время создания процесса.Поскольку длина командной строки превышает максимальный размер, операционная система не может его скомпилировать и завершается сбоем, возможно, с ERROR_FILENAME_EXCED_RANGE ( sic ), даже не пытаясь создать процесс.

Поэтому ваша программа никогда не запускается.

...