从C#运行dos命令行?

时间:2014-01-22 22:36:13

标签: c# command-line start-process

我正在尝试从命令行提示符运行此命令:

"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);

任何人都知道如何改变它的工作原理?感谢。

3 个答案:

答案 0 :(得分:11)

问题在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);

以下是Chris Haas提到的reference。请参阅 EDIT3

答案 1 :(得分:8)

您不必运行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"

答案 2 :(得分: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();