2016-04-02 49 views
0

我尝试执行systeminfo cmd commnand,并且遇到问题。我的问题是,当涉及到方法WaitForExit()时,程序不会继续。我尝试执行“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; 
     } 

回答

0

您可以尝试以下选项:

选项1: 订阅Process.Exited事件,当系统的系统进程退出,读取数据流,以获得过程的结果。

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

也代替了cmd.StandardInput.WriteLine(“systeminfo”);传递systeminfo进程作为参数。它会为你提供更多的控制。例如: ex:cmd.StartInfo.Arguments =“/ C systeminfo.exe”;

+0

让我知道你是否需要相同的代码 –

0

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

1

您是否有特殊原因在这里通过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; 
    }