@ Sugrue olarak eski bir konuyu da kazıyorum.
Neden 32768 (32767 olması gerektiğini düşünüyorum, ancak deneysel test sonucuna inanalım) karakter sınırlamasının neden olduğunu açıklamak için Windows API'yi araştırmamız gerekiyor.
Programı komut satırı argümanları ile nasıl başlattığınız önemli değil, program ShellExecute , CreateProcess veya herhangi bir genişletilmiş sürümüne gider . Bu API'ler temelde resmi olarak belgelenmemiş diğer NT seviyesi API'leri sarar. Gibi bildiğim kadarıyla bu çağrıları sarın NtCreateProcess gerektirir OBJECT_ATTRIBUTES o yapı oluşturmak için, bir parametre olarak yapısını InitializeObjectAttributes kullanılır. Bu yerde görüyoruz UNICODE_STRING
. Şimdi bu yapıya bir göz atalım:
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
USHORT
Uzunluğu saklamak için (16-bit uzunluk [0; 65535]) değişkenini kullanır. Ve göre bu , uzunluk bayt karakter değil cinsinden boyutunu belirtir. Elimizde: 65535 / 2 = 32767
(çünkü WCHAR
2 bayt uzunluğunda).
Bu numarayı araştırmak için birkaç adım var, ancak umarım açıktır.
Ayrıca @sunetos'u desteklemek için neyin kabul edildiğini yanıtlayın. 8191, girilmesine izin verilen maksimum sayıdır cmd.exe
, bu sınırı aşarsanız, The input line is too long.
hata oluşturulur. Dolayısıyla, cmd.exe
yeni süreç için argümanlar iletmenin tek yolu bu olmasa da cevap doğrudur .