将冗长的字符串(作为参数)传递到控制台应用程序中

时间:2012-06-17 08:20:20

标签: c# .net console-application command-line-arguments string-length

我正在用C#创建一个控制台应用程序,在执行时,它会传递一堆数据。其中三个是短字符串,例如用户名,密码等。但是,其中一个是相当冗长的XML文档。

将字符串作为命令行参数传递时,字符串可以使用多长时间?

在执行时是否有更好的替代方法可以将数据传递给C#控制台应用程序?

2 个答案:

答案 0 :(得分:16)

发现有关限制的here following

  • CreateProcess函数的最大命令行长度是 32767个字符。此限制来自UNICODE_STRING 结构

  • CreateProcess是创建流程的核心功能,所以如果你 正在直接与Win32对话,那是你唯一的限制 担心。但是,如果您正在通过其他方式访问CreateProcess 意思是,你经过的路径可能有其他限制。

  • 如果您使用的是CMD.EXE命令处理器,那么您也是 受8192字符命令行长度限制的约束 CMD.EXE。

  • 如果您正在使用ShellExecute / Ex功能,那么您就成了 受INTERNET_MAX_URL_LENGTH(2048左右)命令行的限制 ShellExecute / Ex函数强加的长度限制。 (如果你是 在Windows 95上运行,那么限制只是MAX_PATH。)

有什么更好的方法或替代方法 - 在那里使用所有参数的文件,也许是XML,并将此文件作为命令行参数传递。

答案 1 :(得分:3)

如果XML是程序的主要输入,那么我强烈建议您从标准输入而不是命令行参数(在这种情况下看似不寻常)中读取它。这将为您的程序用户提供三种传递XML的方法:

  • 执行您的程序,并手动输入一些XML
  • 使用其他程序的输出:other_program … | program …
  • 重定向文件中的标准输入:program … < input.xml

但是,如果XML不是主输入,我会提供一个命令行开关来指定输入文件名;这为您提供了一种指定XML的方法:

  • 通过参数program ... -f input.xml
  • 指定输入文件

除了这个建议,我无法准确回答你的实际问题,但我过去已经注意到Windows cmd.exe(Windows 2000或XP下的IIRC)在最大长度方面相当有限一个命令。