【问题标题】:How do I run another cmd.exe call inside a Console application?如何在控制台应用程序中运行另一个 cmd.exe 调用?
【发布时间】:2015-11-21 01:18:47
【问题描述】:

我正在编写一个 C# 控制台应用程序,我需要使用 Chocolatey 安装依赖项,然后设置一些配置。问题是我想在一个控制台中完成所有这些任务。但是,下面的代码示例会弹出一个新的控制台窗口。

static void Main(string[] args) {
    // do some stuff
    System.Diagnostics.Process.Start("CMD.exe", "/C choco install nssm");
    // do other stuff
}

我有什么方法可以将设置部分作为此控制台应用程序的一部分?

【问题讨论】:

  • 您面临的问题是什么?
  • @Yacoub 它会打开一个新的控制台从 Chocolatey 下载

标签: c# cmd console chocolatey


【解决方案1】:

您可以使用接受ProcessStartInfo 参数的Process.Start 方法中的another override。此类有一个WindowStyle 属性,您可以将其设置为ProcessWindowStyle.Hidden。这将隐藏进程创建的任何窗口。

ProcessStartInfo process_start_info = new ProcessStartInfo();

process_start_info.WindowStyle = ProcessWindowStyle.Hidden;

process_start_info.FileName = @"C:\ProgramData\chocolatey\bin\choco.exe";

process_start_info.Arguments = "install googlechrome";

var process = Process.Start(process_start_info);

process.WaitForExit();

请注意,我是直接执行 choco.exe 而不是执行 cmd.exe。但是,如果您能够使用 cmd.exe,那么这应该不是问题。

还请注意,我将调用Process.Start 的结果存储到一个变量中,然后我使用WaitForExit 方法等待该过程完成。之后,您可以简单地启动一个新进程来使用类似的代码安装新包。您可以将此功能封装到某个方法中并多次使用。

【讨论】:

  • 嗯,这可能会有所帮助,但在这种情况下它不起作用,因为您需要在安装期间通过 Chocolatey 选择几个选项
  • @Hooman,您可以在您和您创建的流程之间重定向输入和输出。这是一个相关的问题:stackoverflow.com/questions/21848271/…
  • 你绝对可以做这种事情。您可以做的另一个考虑是使用 Chocolatey.lib 来安装 Chocolatey 包。
猜你喜欢
  • 2023-03-17
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多