【问题标题】:How to create a C# application that opens "cmd.exe" in another window?如何创建在另一个窗口中打开“cmd.exe”的 C# 应用程序?
【发布时间】:2019-03-18 00:19:42
【问题描述】:

我想做的事

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

尝试

我在 stackoverflow 和 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 窗口(用于子进程)永远不会出现(如果我设置了RedirectStandardOutput = false),或者子进程的输出被写入父进程的 cmd 窗口。

【问题讨论】:

  • 您希望新的 CMD 窗口在之后您的程序结束后保持打开吗?
  • @JuanR 是的。子进程的 CMD 窗口应保持打开状态。

标签: c# cmd process subprocess processstartinfo


【解决方案1】:

试试这个:

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

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

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

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

/C 执行字符串指定的命令,然后 终止

/K 执行字符串指定的命令但保留

【讨论】:

  • 啊哈!我之前运行了一个 SO 解决方案,其中包含一个类似的调用,其中 arguments 字段值包含 /c 标志,但评论没有解释它意味着“关闭窗口”(所以我看到窗口出现然后很快消失)。 docs.microsoft.com/en-us/dotnet/api/… 似乎可以更好地解释它,但没有记录 /c/k 标志。 /c 是“关闭”的缩写,/k 是“保持打开”的缩写?非常感谢!
  • @MinhTran:哈!我将编辑我的答案以向其他人澄清这一点。不客气!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多