2014-01-22 110 views
10

我试图从运行命令行提示符下命令:当我在命令行控制台键入从C#运行dos命令行?

"D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless" 

它可以完美运行。

但是,当我试图使它从C#应用程序工作时,它失败了。我试过以下,但似乎上面的命令没有得到执行莫名其妙:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText); 

任何人有任何想法如何改变它的工作?谢谢。

+2

它不再被称为DOS提示符 - 不是自1999年以来的Window * spit * ME。 – Dai

+2

请参阅编辑#3关于如何转义的答案http://stackoverflow.com/a/5635703/231316 –

+0

好的谢谢。我做了改变。但显然你明白,这是好:) –

回答

9

问题解决了,因为我Chris Haas指出的方向。这并不意味着其他答案不起作用,它只是意味着问题可以至少以一种方式解决。

这是,只需在代码中加入"/C ",它应该工作:

原来没有工作:

string fijiCmdText = "D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText) 

;

,工程当前代码:

string fijiCmdText = "/C D:\\fiji\\fiji.exe -macro D:\\fiji\\macros\\FFTBatch.ijm --headless"; 
System.Diagnostics.Process.Start("cmd.exe", fijiCmdText); 

这里是克里斯哈斯提到reference。请参阅EDIT3

+2

Hello Nick,“/ C”是什么意思? –

+0

从引用的SO链接:“/ C(大写)意味着”执行任何其他通过“”。 –

7

您不必运行cmd.exe,只需创建ProcessStartInfo对象并将其参数传递给它。就像这样:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("your command", "parameters"); 

这里是您展示如何做到这一点的例子:

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("tree.com", "/f /a"); 
System.Diagnostics.Process p = new System.Diagnostics.Process(); 
p.StartInfo = info; 
p.Start(); 
p.WaitForExit(); 

所以你的情况,这是你的命令:"D:\\fiji\\fiji.exe",这是你的命令的参数或参数:@"-macro D:\\fiji\\macros\\FFTBatch.ijm --headless"

4

试试这个:

ProcessStartInfo info = new ProcessStartInfo(@"D:\fiji\fiji.exe",@"-macro D:\fiji\macros\FFTBatch.ijm --headless"); 
Process process = new Process(); 
process.StartInfo = info; 
process.Start();