Передача длинных строк (в качестве аргумента) в консольное приложение
Я создаю консольное приложение в С#, которому при выполнении передается куча данных. Три из них - короткие строки, такие как имя пользователя, пароль и т.д. Однако один из них является довольно длинным XML-документом.
Как долго могут быть строки при передаче их в качестве аргументов командной строки?
Есть ли лучшие альтернативы для передачи данных в консольное приложение С# при выполнении?
Ответы
Ответ 1
Нашел ниже об ограничениях:
-
Максимальная длина командной строки для функции CreateProcess
32767 символов. Это ограничение исходит от UNICODE_STRING
структура.
-
CreateProcess - это основная функция для создания процессов, поэтому, если вы
разговаривают напрямую с Win32, тогда единственное ограничение, которое вы должны
беспокоюсь о. Но если вы достигаете CreateProcess каким-то другим
означает, что путь, через который вы проходите, может иметь другие пределы.
-
Если вы используете командный процессор CMD.EXE, то вы также
с учетом ограничения длины строки командной строки 8192, налагаемого
CMD.EXE.
-
Если вы используете функцию ShellExecute/Ex, тогда вы становитесь
с помощью командной строки INTERNET_MAX_URL_LENGTH (около 2048)
ограничение длины, заданное функциями ShellExecute/Ex. (Если ты
работает в Windows 95, тогда предел равен только MAX_PATH.)
Какие лучшие способы или альтернативы - используйте файл, возможно, XML, со всеми вашими параметрами и передайте этот файл как аргумент командной строки.
Ответ 2
Если XML является вашим основным входом в программу, я настоятельно рекомендую вам прочитать его со стандартного ввода вместо аргумента командной строки (что в этом случае показалось бы необычным). Это предоставит пользователям вашей программы три способа передачи в XML:
- выполните вашу программу и вручную введите некоторые XML
- используйте вывод другой программы:
other_program … | program …
- перенаправить стандартный ввод из файла:
program … < input.xml
Если XML, однако, не является основным вводом, я бы предложил ключ командной строки для указания имени входного файла; который дает вам один способ указать XML:
- укажите входной файл через параметр:
program ... -f input.xml
Помимо этого совета, я не могу точно ответить на ваш реальный вопрос, но в прошлом я заметил, что Windows cmd.exe
(IIRC под Windows 2000 или XP) была довольно ограничена в отношении максимальной длины команды.