2016-04-02 48 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; 
    }