As @Sugrue También estoy desenterrando un hilo viejo.
Para explicar por qué hay 32768 (creo que debe ser 32767, pero permite creer resultado de la prueba experimental) caracteres limitación tenemos que cavar en la API de Windows.
No importa cómo inicie el programa con los argumentos de la línea de comandos va a ShellExecute, CreateProcess o cualquier versión extendida. Estas API básicamente envuelven otras API de nivel NT que no están oficialmente documentadas. Por lo que sé, estas llamadas envuelven NtCreateProcess, que requiere OBJECT_ATTRIBUTES estructura como parámetro, para crear esa estructura se usa InitializeObjectAttributes. En este lugar vemos UNICODE_STRING
. Así que ahora vamos a echar un vistazo a esta estructura:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Utiliza USHORT
(longitud de 16 bits [0; 65535]) variable para almacenar longitud. Y según this, la longitud indica el tamaño en bytes, no los caracteres. Así tenemos: 65535/2 = 32767
(porque WCHAR
es de 2 bytes de longitud).
Hay algunos pasos para profundizar en este número, pero espero que sea clara.
Además, para apoyar @sunetos responder a lo que es aceptado. 8191 es un número máximo permitido que se otorgará cmd.exe
, si se excede este límite, se genera The input line is too long.
error. Por lo tanto, la respuesta es correcta a pesar del hecho de que cmd.exe
no es la única forma de pasar argumentos para un nuevo proceso.
Y mi pregunta es .. También podemos personalizar it..if en absoluto? – eRaisedToX
@eRaisedToX bien bastante vieja respuesta, pero probablemente no. Pero, ¿por qué lo necesitas en primer lugar? Responder a esta pregunta generalmente da mejores ideas. – ST3