执行 "systeminfo" cmd 命令等待退出不继续



我尝试执行systeminfo cmd命令,但遇到问题。我的问题是,当涉及到方法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;
        }

您在这里使用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;
    }

您可以尝试以下选项:

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

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

也代替cmd。StandardInput.WriteLine("systeminfo");将systeminfo过程作为自变量传递。它将为您提供更多的控制。例如:cmd。StartInfo.Arguments="/C systeminfo.exe";

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

最新更新