如何在Console应用程序中运行另一个cmd.exe调用

本文关键字:另一个 cmd exe 调用 运行 Console 应用程序 | 更新日期: 2023-09-27 18:23:38

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

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

有什么方法可以作为控制台应用程序的一部分来完成设置部分吗?

如何在Console应用程序中运行另一个cmd.exe调用

您可以使用接受ProcessStartInfo参数的Process.Start方法的另一个重写。这个类有一个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方法等待进程完成。之后,您可以简单地启动一个新的过程,使用类似的代码安装一个新软件包。您可以将此功能封装到某个方法中并多次使用它。