Как @Sugrue Я также выкапываю старую нить.
Чтобы объяснить, почему существует 32768 (я думаю, что это должно быть 32767, но позволяет полагать, что результат экспериментального тестирования), нам необходимо копаться в Windows API.
Независимо от того, как вы запускаете программу с аргументами командной строки, она идет до ShellExecute, CreateProcess или расширяет их версию. Эти API в основном обертывают другие API уровня NT, которые официально не документированы. Насколько я знаю, эти вызовы обертывают NtCreateProcess, что требует структуры OBJECT_ATTRIBUTES в качестве параметра, чтобы создать эту структуру InitializeObjectAttributes. В этом месте мы видим UNICODE_STRING
. Итак, теперь давайте посмотрим в эту структуру:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Он использует USHORT
(длина 16-битную [0; 65535]) переменной для хранения длины. И согласно this, длина указывает размер в байтах, а не на символы. Итак, у нас есть: 65535/2 = 32767
(потому что WCHAR
имеет длину 2 байта).
Есть несколько шагов, чтобы вникнуть в это число, но я надеюсь, что это ясно.
Кроме того, для поддержки @sunetos ответьте, что принято. 8191 - максимальное число, разрешенное для ввода в cmd.exe
, если вы превысите этот предел, возникает ошибка The input line is too long.
. Итак, ответ правильный, несмотря на то, что cmd.exe
- это не единственный способ передать аргументы для нового процесса.
И мой вопрос .. Также мы можем его настроить ... или вообще? – eRaisedToX
@eRaisedToX хорошо довольно старый ответ, но, вероятно, нет. Но зачем вам это на первом месте? Ответ на этот вопрос обычно дает лучшие идеи. – ST3