【问题标题】:running dos command line from C#?从 C# 运行 dos 命令行?
【发布时间】:2017-07-25 04:47:56
【问题描述】:

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

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

有人知道如何改变它来工作吗?谢谢。

【问题讨论】:

  • 它不再被称为 DOS 提示符 - 自 1999 年的 Window spit ME 以来就没有了。
  • 查看编辑#3关于如何逃避事情的答案stackoverflow.com/a/5635703/231316
  • 好的,谢谢。我已经做出了改变。但显然你明白了,这很好:)
  • 也许可以创建一个 .bat 文件并从您的应用程序中调用它
  • @ChrisHaas:成功了。您能否在此处写下您的 cmets 作为正式答案。你应该得到学分。谢谢。

标签: c# command-line start-process


【解决方案1】:

问题已按照 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

【讨论】:

  • 你好尼克,“/C”是什么意思?
  • 来自引用的 SO 链接:“/C(大写)表示“执行传递的任何其他内容”。
  • @VuNguyen 你可以在dos命令提示符窗口中输入:cmd /?发现/C的意思是:''执行字符串指定的命令,然后终止'。通常dos命令和参数是不区分大小写的。
【解决方案2】:

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

【讨论】:

  • 你只需要对像COPY这样没有EXE并且实际上是cmd.exe的内置命令的命令行命令运行CMD:new ProcessStartInfo("CMD", "/C COPY A.TXT B.TXT"
【解决方案3】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多