将冗长的字符串(作为参数)传递到控制台应用程序
Posted
技术标签:
【中文标题】将冗长的字符串(作为参数)传递到控制台应用程序【英文标题】:Passing lengthy strings (as an argument) into a console application 【发布时间】:2012-06-19 15:49:14 【问题描述】:我正在用 C# 创建一个控制台应用程序,在执行时它会传递一堆数据。其中三个是短字符串,例如用户名、密码等。然而,其中一个是相当长的 XML 文档。
当将字符串作为命令行参数传入时,字符串可以有多长?
在执行时将数据传递到 C# 控制台应用程序是否有更好的替代方案?
【问题讨论】:
将 XML 数据存储在一个文件中,并且只将文件路径作为参数传递给命令行工具。 或者通过标准输入传递xml。无论如何,好问题。 【参考方案1】:如果 XML 是您程序的主要输入,那么我强烈建议您从标准输入中读取它,而不是作为命令行参数(在这种情况下这似乎不寻常)。这将为您的程序的用户提供三种传递 XML 的方式:
执行您的程序,并手动输入一些 XML 使用另一个程序的输出:other_program … | program …
从文件重定向标准输入:program … < input.xml
但是,如果 XML 不是主要输入,我会提供一个命令行开关来指定输入文件名;它为您提供了一种指定 XML 的方法:
通过参数指定输入文件:program ... -f input.xml
除此建议外,我无法准确回答您的实际问题,但我过去注意到 Windows 的 cmd.exe
(Windows 2000 或 XP 下的 IIRC)在命令的最大长度方面相当有限.
【讨论】:
【参考方案2】:找到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)和所有参数,然后将此文件作为命令行参数传递。
【讨论】:
以上是关于将冗长的字符串(作为参数)传递到控制台应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Blob SAS URI 字符在作为查询参数传递到 Azure 函数应用程序时解码
mod_rewrite:将路径和查询字符串 URL 作为参数传递