如何创建在另一个 window 中打开 "cmd.exe" 的 C# 应用程序?

How to create a C# application that opens "cmd.exe" in another window?

我想做什么

我想创建一个简单的 C# 应用程序,它创建一个运行 cmd.exeProcess 对象(应用程序的子进程),并在该 shell 中执行命令echo "Hello World!"(或我在编译应用程序之前指定的任意字符串)。 C# 应用程序在构建 运行 时创建 shell 并保持此状态:

尝试次数

我在 Whosebug 和 MSDN 上搜索了示例,但很难找到为 ProcessProcessStartInfo 设置的正确选项。特别是,我试过:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "echo helloworld!";
            string strCmdText;
            process.StartInfo = startInfo;
            process.Start();
            */


            var proc = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = @"cmd.exe", // iexplorer.exe opened up ie!
                    Arguments = "",
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = false,
                    WorkingDirectory = @"C:\Users\mtran\Desktop\ConsoleApp1", 
                    WindowStyle = ProcessWindowStyle.Normal

                }
            };
            proc.Start();
        }
    }
}

但是第二个 cmd window(对于子进程)从未出现(如果我设置 RedirectStandardOutput = false)或者子进程的输出被写入父进程的 cmd window.

试试这个:

Process.Start("cmd.exe", "/k ECHO hello Juan!");

它将启动命令 window,执行 ECHO 语句并保持 window 打开。

如果您需要额外配置,请随意使用 ProcessStartInfo 实例作为参数。

如果您 运行 cmd /? 在命令提示符下,您可以看到有关开关的其他信息:

/C Carries out the command specified by string and then terminates

/K Carries out the command specified by string but remains