C# 子进程窗口未出现

C# 子进程窗口未出现,c#,child-process,C#,Child Process,我试图从显示控制台的c#控制台应用程序创建一个子进程。我尝试了以下操作,但没有出现窗口 ProcessStartInfo = new ProcessStartInfo(name) { UseShellExecute = false, RedirectStandardError = true, RedirectStandardOutput = true, WindowSt

我试图从显示控制台的c#控制台应用程序创建一个子进程。我尝试了以下操作,但没有出现窗口

        ProcessStartInfo = new ProcessStartInfo(name)
        {
            UseShellExecute = false,
            RedirectStandardError = true,
            RedirectStandardOutput = true,
            WindowStyle = ProcessWindowStyle.Maximized,
            CreateNoWindow = false,
            ErrorDialog = false
        };

        if (args != null)
        {
            ProcessStartInfo.Arguments = args;
        }

        if (workingDirectory != null)
        {
            ProcessStartInfo.WorkingDirectory = workingDirectory;
        }

        Process = new Process {EnableRaisingEvents = true, StartInfo = ProcessStartInfo};
        Process.Start();

在父级控制台中运行子进程的正确方法是设置
ProcessStartInfo
类的
UseShellExecute
属性。让我们考虑一个执行时间命令的例子。为什么是时间?因为它是从标准输入读取的。这样,您将知道它使用哪个控制台

public class Program
{
    public static void Main(string[] args)
    {
        var processInfo = new ProcessStartInfo
        {
            FileName = "cmd.exe",
            Arguments = "/c time"
        };

        Console.WriteLine("Starting child process...");
        using (var process = Process.Start(processInfo))
        {
            process.WaitForExit();
        }
    }
}
我们保留了默认值
UseShellExecute
,即
true
。这意味着一个shell将用于子进程。使用shell意味着将创建一个新的控制台

让我们将
UseShellExecute
的值翻转为
false

public class Program
{
    public static void Main(string[] args)
    {
        var processInfo = new ProcessStartInfo
        {
            UseShellExecute = false, // change value to false
            FileName = "cmd.exe",
            Arguments = "/c time"
        };

        Console.WriteLine("Starting child process...");
        using (var process = Process.Start(processInfo))
        {
            process.WaitForExit();
        }
    }
}

name
args
workingDirectory
的值是什么?该名称是子控制台应用程序(MyApp.exe)的名称。对于本次讨论,args和workingDirectory都为空。只要进行少量更改以删除输出重定向,我就可以显示窗口。谢谢你的帮助