C# 执行;系统信息“;cmd命令WaitForExit不';我不能继续

C# 执行;系统信息“;cmd命令WaitForExit不';我不能继续,c#,.net,cmd,console-application,C#,.net,Cmd,Console Application,我尝试执行systeminfo cmd command,但遇到问题。我的问题是,当涉及到WaitForExit()方法时,程序不会继续。我试着 using (var cmd = new Process()) { cmd.StartInfo.FileName = "cmd.exe"; cmd.StartInfo.RedirectStandardInput = true; cmd.StartInf

我尝试执行systeminfo cmd command,但遇到问题。我的问题是,当涉及到WaitForExit()方法时,程序不会继续。我试着

        using (var cmd = new Process())
        {
            cmd.StartInfo.FileName = "cmd.exe";
            cmd.StartInfo.RedirectStandardInput = true;
            cmd.StartInfo.RedirectStandardOutput = true;
            cmd.StartInfo.CreateNoWindow = false;
            cmd.StartInfo.UseShellExecute = false;

            cmd.Start();
            cmd.StandardInput.WriteLine("systeminfo");
            cmd.StandardInput.Flush();

            cmd.WaitForExit();

            var result = cmd.StandardOutput.ReadToEnd();

            cmd.StandardInput.Close();
            cmd.StandardOutput.Close();

            return result;
        }

您可以尝试以下选项:

备选案文1: 订阅Process.Exited事件,当systeminfo进程退出时,读取流以获取进程的结果

备选案文2: 将systeminfo进程输出重定向到文本文件。当进程存在事件发生时,从文本文件中读取结果

也不是cmd.StandardInput.WriteLine(“systeminfo”);将systeminfo进程作为参数传递。它将为您提供更多的控制。
例如:cmd.StartInfo.Arguments=“/C systeminfo.exe”

您可以尝试以下选项:

备选案文1: 订阅Process.Exited事件,当systeminfo进程退出时,读取流以获取进程的结果

备选案文2: 将systeminfo进程输出重定向到文本文件。当进程存在事件发生时,从文本文件中读取结果

也不是cmd.StandardInput.WriteLine(“systeminfo”);将systeminfo进程作为参数传递。它将为您提供更多的控制。
例如:cmd.StartInfo.Arguments=“/C systeminfo.exe”

您必须将命令添加到cmd,cmd运行该命令并返回结果并退出。
使用类似“cmd/c ver”的命令可以正常工作并返回windows版本。

您必须将命令添加到cmd,cmd运行该命令并返回结果并退出。
使用像“cmd/c ver”这样的命令可以正常工作并返回windows版本。

在这里使用cmd有什么特别的原因吗?这在这里是完全不必要的,这也解释了你的问题。运行
cmd
的交互式实例,假装键入了
systeminfo
,然后等待
cmd
退出。就像一个普通的交互实例一样,它不会这样做。它将只是坐在那里,等待更多的命令。相反,为什么不直接调用
systeminfo

    using (var systeminfo= new Process
      {
        FileName = "systeminfo",
        RedirectStandardOutput = true,
        CreateNoWindow = false,
        UseShellExecute = false,
      })
    {
        systeminfo.Start();

        var result = systeminfo.StandardOutput.ReadToEnd();
        systeminfo.WaitForExit();

        return result;
    }

您在这里使用
cmd
有什么特别的原因吗?这在这里是完全不必要的,这也解释了你的问题。运行
cmd
的交互式实例,假装键入了
systeminfo
,然后等待
cmd
退出。就像一个普通的交互实例一样,它不会这样做。它将只是坐在那里,等待更多的命令。相反,为什么不直接调用
systeminfo

    using (var systeminfo= new Process
      {
        FileName = "systeminfo",
        RedirectStandardOutput = true,
        CreateNoWindow = false,
        UseShellExecute = false,
      })
    {
        systeminfo.Start();

        var result = systeminfo.StandardOutput.ReadToEnd();
        systeminfo.WaitForExit();

        return result;
    }

我也有同样的问题,只是我没有启动CMD,而是启动systeminfo directley。我只是在Windows7电脑上遇到这个问题,而不是在Windows10上。像JulioEnrique一样,我在WaitForExit()之后读取StandardOutput,将等待移到StandardOutput之后。Read修复了这个问题。我也有同样的问题,只是我没有启动CMD,而是启动systeminfo directley。我只是在Windows7电脑上遇到这个问题,而不是在Windows10上。就像JulioEnrique一样,我在WaitForExit()之后读取StandardOutput,将等待移到StandardOutput之后。Read修复了这个问题。