C#Process.Start参数被截断

传递非常长的文件路径时,我有截断的参数。 我需要启动一个程序并通过命令参数传递它 – 有时它只是截断命令。 它是全局的 – 因此它不仅是每个参数的问题,而且是整个问题。

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

我不确定你的问题是什么,但命令行有一个限制。 同样的限制对Process.Start(命令,args)有效

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

如何解决限制要解决限制,请使用以下一种或多种方法(根据您的具体情况):

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

例如,不要在批处理文件中使用ExecutableFile.exe Parameter1 Parameter2 … ParameterN命令行,而是修改程序以使用与以下命令行类似的命令行,其中ParameterFile是包含所需参数的文件(parameter1 parameter2 … ParameterN):

ExecutableFile.exe c:\temp\ParameterFile.txt

  • 修改使用大型环境变量的程序,以使环境变量包含少于2047或8191个字符(适用于您的操作系统)。

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

  • 对文件夹和文件使用较短的名称。
  • 减少文件夹树的深度。
  • 将文件存储在较少的文件夹中,以便PATH环境变量中需要的文件夹较少。
  • 研究可用于减少PATH对定位.dll文件的依赖性的可能方法。

这是来自Microsoft支持 ,所以没有什么对我有用 – 似乎这个限制不能增加,并且没有办法以任何其他方式运行它…

我将尝试做的是: 记住每个文件的路径,将它们移动到某个DIR然后运行程序,将CurrentDirectory设置为DIR并只传入文件名,并在程序结束后将文件移回其位置 -丑陋,丑陋,丑陋,我知道,但似乎没有别的办法……