12

Estoy creando una aplicación de consola en C# a la cual, en la ejecución, se le pasan varios datos. Tres de ellos son cadenas cortas, como nombre de usuario, contraseña, etc. Sin embargo, uno de ellos es un documento XML bastante extenso.Pasar cadenas largas (como argumento) a una aplicación de consola

¿Cuánto tiempo pueden durar las cadenas, al pasarlas como argumentos de línea de comandos?

¿Hay alguna alternativa mejor para pasar datos a una aplicación de consola C# en la ejecución?

+4

Almacena los datos XML en un archivo y solo pasa el archivo a la herramienta de línea de comandos como argumento. – nemesv

+3

O pase el xml a través de la entrada estándar. De todos modos, buena pregunta. – orip

Respuesta

16

Encontrado here following sobre limitaciones:

  • La longitud máxima de línea de comandos para la función CreateProcess es 32.767 caracteres. Esta limitación proviene de la estructura UNICODE_STRING .

  • CreateProcess es la función principal para la creación de procesos, por lo que si está hablando directamente a Win32, entonces ese es el único límite que tiene que preocuparse por . Pero si está llegando a CreateProcess por algún otro medio , entonces la ruta por la que viaja puede tener otros límites.

  • Si está utilizando el procesador de comandos cmd.exe, entonces también son sujetos a la línea de comandos límite de 8192 caracteres impuesto por cmd.exe.

  • Si está utilizando la función ShellExecute/Ex, entonces se convierten en sujeto a la INTERNET_MAX_URL_LENGTH (alrededor de 2048) línea de comandos límite longitud impuesta por las funciones ShellExecute/Ex. (Si no está se ejecuta en Windows 95, el límite sólo es MAX_PATH.)

Lo mejores formas o alternativas - archivo de uso, tal vez XML, con todos sus parámetros de allí, y pasar este archivo como línea de comandos argumento.

3

Si el XML es la entrada principal de su programa, sugiero que lo lea desde la entrada estándar en lugar de como un argumento de línea de comandos (lo que parecería inusual en este caso). Esto daría a los usuarios de su programa de tres maneras para pasar en XML:

  • ejecutar su programa, y ​​escriba manualmente en alguna XML
  • utilizar la salida de otro programa: other_program … | program …
  • redirigir la entrada estándar de un archivo : program … < input.xml

Si el XML, sin embargo, no es la entrada principal, ofrecería un modificador de línea de comandos para especificar un nombre de archivo de entrada; que le da una forma de especificar el XML:

  • especifique el archivo de entrada a través del parámetro: program ... -f input.xml

Además de estos consejos, no puedo responder a su pregunta real con precisión, pero me he dado cuenta en el pasado que Windows 'cmd.exe (IIRC bajo Windows 2000 o XP) era bastante limitado con respecto a la longitud máxima de un comando.

Cuestiones relacionadas