System.Diagnostics.Process参数

时间:2009-06-18 12:36:40

标签: c#

如何将Argument传递给带空格的System.Dignostics.Process。我这样做:

System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = exePath + @"\bin\test.exe";

string args = String.Format(@"{0}{1}{2}{3}", "-plot " ,path1, " -o ", path2);
proc.StartInfo.Arguments = args;

当path1和path2不包含空格(假设path1 = C:\ Temp \和path2 = C:\ Temp \ Test)然后它工作正常,但是当path1和path2包含空格时 path1 = C:\ Documents and Settings \ user \ Desktop和path2 = C:\ Documents and Settings \ user \ Desktop \ New Folder)然后它将路径1和path2中断并中止。

请告诉我这样做的正确方法。

谢谢, Ashish

5 个答案:

答案 0 :(得分:2)

Process proc = new Process(); 
proc.EnableRaisingEvents = false; 
proc.StartInfo.FileName = Path.Combine(exePath, @"bin\test.exe");
proc.StartInfo.Arguments = String.Format(@"-plot ""{0}"" -o ""{1}""", path1, path2);

如果使用文字(不带@),则可以转义引号:

\"{0}\"

如果使用逐字字符串(带@),您可以加倍引号:

""{0}""

答案 1 :(得分:1)

您需要将路径封装在引号中。否则,它会将空格作为分隔符读取,并认为路径的其余部分是参数。

答案 2 :(得分:0)

你可以将包含空格的参数放在双引号中,如下所示:

string args = String.Format(@"{0} ""{1}"" {2} ""{3}""", "-plot", path1, "-o", path2);

答案 3 :(得分:0)

将路径放在引号中......例如“\”“+ path1 +”\“”

答案 4 :(得分:0)

尝试以下方法:

string args = String.Format("{0}\"{1}\"{2}\"{3}\"", "-plot " ,path1, " -o ", path2);

这将在您的路径周围加上引号,以便它们作为单个字符串传递,并忽略它们中的空格。