commandline argument parameter limitation

18,107

Solution 1

It depends on the OS:

See Command prompt (Cmd. exe) command-line string limitation on the Microsoft Support site.

On computers running Microsoft Windows XP or later, the maximum length of the string that you can use at the command prompt is 8191 characters. On computers running Microsoft Windows 2000 or Windows NT 4.0, the maximum length of the string that you can use at the command prompt is 2047 characters.

(emphasis mine)

In regards to the size of a string array - if you have many millions of strings in a string array - you are mostly limited by the amount of memory available.

Solution 2

Although a bad idea, Process.start with useshellexecute=false would invoke createprocess() which allows for 32767 characters in the command line (although this is also the maximum size for the entire environment block)

Solution 3

If you are passing 10,000 arguments to a program, you should be putting those arguments in a file and reading the file from disk.

Solution 4

You could store the arguments in a text file and pass that text file as the argument. Your application can then parse the text file to analyse the arguments.

Solution 5

It is not really good practice to use command line arguments for huge arrays. Put your arguments in a configuration file instead, and just pass the filename as a command line argument.

The OS limit varies with the Windows version. It could be about 2k or 8k:

http://support.microsoft.com/kb/830473

Share:
18,107
Muthukumar Palaniappan
Author by

Muthukumar Palaniappan

Updated on June 11, 2022

Comments

  • Muthukumar Palaniappan
    Muthukumar Palaniappan almost 2 years

    Language: C# I have to pass a huge string array (built dynamically) as an argument to run an exe. I am thinking of acheiving it by the below 2 ways. But I am not feeling confident.

    1. I can create it as one string delimited by spaces. I can invoke the exe through Process.Start. Hence the running child process considers the space and holds as a string array. However I am unsure about the string array limitation. Suppose if my string array count exceeds more than 10,000

    2. I can create it as one string delimited by a special symbol, which never fall in data. I can invoke the exe with the string. The running child process considers it as one single string, where i can split it with the same delimiter to get the string array back. However, here i am unsure about the command size. Will that do, if the command line string length is large

    Can anyone help me in letting me know the parameter size limitations

  • Twonky
    Twonky about 7 years
    Why would this be a bad idea?
  • Dave Cousineau
    Dave Cousineau over 6 years
    or distilling the concept down to something more manageable and letting the program determine how to obtain the information. (a query or arguments for a query, rather than a query result, for example)
  • Macindows
    Macindows almost 4 years
    more like unconventional idea