我正在用C#创建一个控制台应用程序,在执行时,它会传递一堆数据。其中三个是短字符串,例如用户名,密码等。但是,其中一个是相当冗长的XML文档。
将字符串作为命令行参数传递时,字符串可以使用多长时间?
在执行时是否有更好的替代方法可以将数据传递给C#控制台应用程序?
答案 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的方法:
other_program … | program …
program … < input.xml
但是,如果XML不是主输入,我会提供一个命令行开关来指定输入文件名;这为您提供了一种指定XML的方法:
program ... -f input.xml
除了这个建议,我无法准确回答你的实际问题,但我过去已经注意到Windows cmd.exe
(Windows 2000或XP下的IIRC)在最大长度方面相当有限一个命令。