参数未传递到命令提示符

时间:2014-08-19 09:25:50

标签: c# command-prompt

string appPath = Path.GetDirectoryName(Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));

Process p = new Process();
p.StartInfo = new ProcessStartInfo("cmd.exe", @"/c opencvproject.exe " + @appPath + @"\\bin\\Debug\\center\\centerilluminate.jpg");

p.Start();

我在我的另一台计算机上尝试了这个并且它可以工作,但是当我在我的新计算机上尝试它时,这不起作用。谁知道如何解决这个问题?我正在使用的程序是c#,我正在调用cmd来调用c++程序,这是opencvproject.exe

我仍然有多个实例使用cmd来触发其他c++程序和python脚本运行,而且这些脚本也不起作用。我不确定我做错了什么..

2 个答案:

答案 0 :(得分:2)

保持双引号之间的路径。

p.StartInfo = new ProcessStartInfo("cmd.exe", "/c opencvproject.exe \"" + appPath + "\\bin\\Debug\\center\\centerilluminate.jpg\"");

<强>解释

由反斜杠()后跟字母或数字组合组成的字符组合称为&#34;转义序列。&#34;
http://msdn.microsoft.com/ja-jp/library/h21280bw.aspx

@使转义序列无效,所以..

var s1 = @"\\bin\\Debug\\";  // This contains wrong path \\bin\\Debug\\
var s2 = "\\bin\\Debug\\";   // This contains right path \bin\Debug\

需要使用转义序列来保持双引号之间的双引号。

var s3 = "\"\\bin\\Debug\\\"";  // This contains "\bin\Debug\"
var s4 = @"\"\\bin\\Debug\\\"";  // compile error 

答案 1 :(得分:0)

@字符会自动转义后面字符串中的字符,所以你不应该对你的路径加倍反斜杠。

例如,您所拥有的地方:
@"\\bin\\debug\\.."

它应该是:
@"\bin\debug\..."

或:
"\\bin\\debug\\.."(没有@)

此外,如果您的apppath包含空格,则应使用“字符

包围整个字符串