【问题标题】:Advantages of using cmd.exe /c over not using cmd at all使用 cmd.exe /c 比完全不使用 cmd 的优势
【发布时间】:2016-04-26 23:29:29
【问题描述】:

如果我在 C# 中运行一个进程。使用 cmd /c 比直接运行进程有什么好处吗?

例如:

ProcessStartInfo info = new ProcessStartInfo("cmd.exe");
info.Arguments = "/c application.exe";
Process.Start(info);

相对于

ProcessStartInfo info = new ProcessStartInfo("application.exe");
Process.Start(info);

【问题讨论】:

  • 你知道/c参数是做什么的吗?
  • @JeroenVannevel 是的。因此,我为什么要问这个问题。

标签: c# command-line process cmd


【解决方案1】:

cmd /ccmd /k的区别:

就像说cmd /?:

  • 使用cmd /c 然后执行命令系列 - 内核结束。
  • 使用cmd /k 然后执行命令系列 - 内核已打开。 如果你需要内核关闭,你必须使用cmd /c。 否则只有cmd /k

不要忘记退出 D.O.S. IO OS 用命令:exit,exit,exit,直到windows关闭。

【讨论】:

    【解决方案2】:

    使用CMD.EXE 的另一个好处是如果您想执行内置命令。 CMD.EXE 中的许多命令不是单独的可执行文件,而是完全在 CMD.EXE 中实现,例如 dircopymkdircd 等。 MKLINK 是一个内置命令,我见过有人绊倒。

    我不知道获取内置命令列表的简单内置方法。但是您可以使用HELP(不是内置的!)获取CMD.EXE 命令的列表,并将每个命令传递给WHERE。如果WHERE 没有找到,则该命令必须是内置的。

    另外,如果你想执行 BAT/CMD 文件,CMD.EXE 是不错的选择。

    【讨论】:

      【解决方案3】:

      如果您使用cmd /c,您可以通过用&& 分隔命令来一次执行多个命令。例如:cmd /c "application1.exe&&application2.exe"。否则如果只有一个进程要执行,那跟直接执行进程没有区别。

      编辑:例如,如果进程不存在,显然cmd /c 也可以返回错误。

      【讨论】:

      • 感谢您的回答。如果我们重定向“application.exe”的输出,cmd /c 会等到到达 EndOfStream 吗?还是会在流程开始后立即关闭?
      • cmd /c 是同步调用,在执行的进程运行完成之前不会返回。重定向“application.exe”的输出将没有效果。
      猜你喜欢
      • 2021-09-23
      • 1970-01-01
      • 2017-11-28
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多