将长字符串作为参数传递给控制台应用程序

12

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

当将它们作为命令行参数传递时,这些字符串可以有多长?

有没有更好的选择可以在执行时将数据传递给C#控制台应用程序?


4
将XML数据存储到文件中,然后将文件路径作为参数传递给命令行工具。 - nemesv
3
可以将XML文件通过标准输入传递。不管怎样,这是个好问题。 - orip
2个回答

16

这里找到了以下关于限制的内容:

  • 由于UNICODE_STRING结构,CreateProcess函数的最大命令行长度为32767个字符。

  • CreateProcess是创建进程的核心函数,因此如果直接与Win32通信,则只需担心这个限制。但是,如果您通过其他方式访问CreateProcess,则您所经过的路径可能会有其他限制。

  • 如果使用CMD.EXE命令处理器,则还需要遵守CMD.EXE强制执行的8192个字符命令行长度限制。

  • 如果使用ShellExecute/Ex函数,则需要遵守ShellExecute/Ex函数强加的INTERNET_MAX_URL_LENGTH(大约为2048)命令行长度限制。(如果运行在Windows 95上,则限制只有MAX_PATH。)

更好的方法或替代方案是,使用文件(例如XML)来存储所有参数,并将该文件作为命令行参数传递。


3
如果XML是你的程序的主要输入,则我强烈建议你从标准输入中读取它,而不是作为命令行参数(在这种情况下似乎不寻常)。这将为程序的用户提供三种传递XML的方式:
- 执行程序,并手动键入某些XML。 - 使用另一个程序的输出:`other_program … | program …` - 从文件重定向标准输入:`program … < input.xml`
如果XML不是主要输入,我会提供一个命令行开关来指定输入文件名,这将给你一种指定XML的方法:
- 通过参数指定输入文件:`program ... -f input.xml`
除了这个建议之外,我无法精确回答你的实际问题,但我曾经注意到过,在 Windows 的 `cmd.exe` 下(如果我没记错的话是在 Windows 2000 或 XP 下)对于命令的最大长度相当有限。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接