如何在控制台应用程序中运行另一个cmd.exe调用?

时间:2015-11-21 01:18:47

标签: c# cmd console chocolatey

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

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用接受Process.Start参数的ProcessStartInfo方法的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方法等待该过程完成。之后,您只需启动一个新进程即可使用类似代码安装新程序包。您可以将此功能封装到某个方法中并多次使用它。