执行“systeminfo”cmd命令WaitForExit不会继续

时间:2016-04-02 23:23:16

标签: c# .net cmd console-application

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

3 个答案:

答案 0 :(得分:2)

您在这里查看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}}

答案 1 :(得分:0)

您可以尝试以下选项:

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

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

也代替cmd.StandardInput.WriteLine(" systeminfo");传递systeminfo进程作为参数。它将为您提供更多控制。 例如:cmd.StartInfo.Arguments =" / C systeminfo.exe&#34 ;;

答案 2 :(得分:0)

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