Sebagai @Sugrue, saya juga menggali utas lama.
Untuk menjelaskan mengapa ada batasan karakter 32.768 (menurut saya seharusnya 32767, tetapi mari percaya hasil pengujian eksperimental), kita perlu menggali ke dalam Windows API.
Tidak peduli bagaimana Anda meluncurkan program dengan argumen baris perintah, ia pergi ke ShellExecute , CreateProcess atau versi diperpanjang mereka. API ini pada dasarnya membungkus API tingkat NT lain yang tidak didokumentasikan secara resmi. Sejauh yang saya tahu panggilan ini membungkus NtCreateProcess , yang membutuhkan struktur OBJECT_ATTRIBUTES sebagai parameter, untuk membuat struktur yang digunakan InitializeObjectAttributes . Di tempat ini kita melihat UNICODE_STRING
. Jadi sekarang mari kita lihat struktur ini:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
Ini menggunakan USHORT
variabel (16-bit length [0; 65535]) untuk menyimpan panjang. Dan menurut ini , panjang menunjukkan ukuran dalam byte, bukan karakter. Jadi kami punya: 65535 / 2 = 32767
(karenaWCHAR
panjangnya 2 byte).
Ada beberapa langkah untuk menggali angka ini, tapi saya harap ini jelas.
Juga, untuk mendukung @sunetos menjawab apa yang diterima. 8191 adalah jumlah maksimum yang diperbolehkan untuk dimasuki cmd.exe
, jika Anda melebihi batas ini, The input line is too long.
kesalahan dihasilkan. Jadi, jawaban benar meskipun faktanya itu cmd.exe
bukan satu-satunya cara untuk menyampaikan argumen untuk proses baru.