Подтвердить что ты не робот

Передача длинных строк (в качестве аргумента) в консольное приложение

Я создаю консольное приложение в С#, которому при выполнении передается куча данных. Три из них - короткие строки, такие как имя пользователя, пароль и т.д. Однако один из них является довольно длинным XML-документом.

Как долго могут быть строки при передаче их в качестве аргументов командной строки?

Есть ли лучшие альтернативы для передачи данных в консольное приложение С# при выполнении?

4b9b3361

Ответ 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) была довольно ограничена в отношении максимальной длины команды.