2009-07-29 83 views
1

传递非常长的文件路径时,我得到了截断的参数。我需要启动一个程序,并通过命令params传递所有内容 - 有时它只是截断命令。它在全球范围内完成 - 所以它不仅是每个参数的问题,而且也是整体的问题。C#Process.Start参数截断

编辑: 该问题可能是命令行长度的限制,因为monkey_p表示。问题是:如何绕过它? (改变工作目录不会做becouse文件可以存在于不同的位置)。

+0

可能有另一个问题:sp aces中的参数,因为空间用于在参数之间进行中断。围绕参数使用引号。 – 2009-07-29 18:45:42

+0

1.所有参数都被引号括起来 2.即使一个被引号包围的长参数被截断 – argh 2009-07-30 17:44:44

回答

1

如何解决此限制 解决此限制,使用一个或 多个下列方法(如 根据您的情况):

  • 修改 需要程序长命令 行,以便它们使用 包含参数信息的文件, ,然后在命令行中包含文件 的名称。

例如,代替使用 ExecutableFile.exe参数1 参数2 ...在批处理文件ParameterN命令行 ,修改程序 使用命令行是类似于 下面的命令行,其中 PARAMETERFILE是包含 所需的参数(参数1 参数2 ... ParameterN)的文件:

ExecutableFile.exe c:\temp\ParameterFile.txt

  • 使用大环境 变量,这样的环境 变量包含比任何 2047年或8191个字符以下(如适当 到您的操作系统),修改 程序。

例如,如果PATH环境 变量包含比任 2047或8191个字符(如 适当操作系统), 使用下列 一种或多种方法来减少的 字符数:

  • 使用较短的名称作为 文件夹和文件。
  • 减少文件树的深度 。
  • 将文件存储在较少的 文件夹中,因此PATH环境 变量中需要的文件夹较少,为 。
  • 调查可能的 方法,您可以使用这些方法来减少PATH的 依赖项,以查找.dll 文件。

即从Microsoft Support,所以没有什么有用的我 - 似乎这限制无法增加,也没有办法以任何其他方式运行...

我会试图做的是:记住每个文件的路径,将它们移动到某个DIR,然后运行程序并将CurrentDirectory设置为DIR,然后传递文件名并在程序结束后将文件移回原位 - 丑陋,丑陋,丑陋的,我知道,但似乎没有其他的方式...

2

我不确定你的问题是什么,但命令行有一个限制。此相同的限制将是有效的Process.Start(命令,参数)

在运行Microsoft Windows XP 或更高版本中, 字符串,你可以在命令提示符 使用的最大长度为电脑8191个字符。在 运行Microsoft Windows 2000或Windows NT 4.0的计算机上,可以在命令提示符处使用 字符串的最大长度为 字符为2047 个字符。