2016-04-02 19 views
0

systeminfo cmdコマンドを実行しようとしましたが、問題があります。私の問題は、メソッドWaitForExit()になると、プログラムは続かないということです。"systeminfo" cmdコマンドを実行中WaitForExitが続行しない

オプション1: Process.Exitedイベントに登録し、システム情報のプロセスが終了すると、プロセスの結果を得るために、ストリームを読んで私は、次のオプションを試すことができ

 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

を試してみてください。

オプション2: systeminfoプロセスの出力をテキストファイルにリダイレクトします。 process existsイベントが発生した場合は、テキストファイルから結果を読み込みます。

cmd.StandardInput.WriteLine( "systeminfo")の代わりにも使用できます。 systeminfoプロセスを引数として渡します。それはより多くの制御を提供します。 例:cmd.StartInfo.Arguments = "/ C systeminfo.exe";

+0

同じコードが必要な場合は教えてください –

0

cmdにコマンドを追加してcmdを実行し、結果を返して終了する必要があります。 "cmd/c ver"のようなコマンドを使用しても問題ありません。

1

ここにcmdを通過する特別な理由はありますか?それはここで全く必要ではなく、またあなたの問題を説明します。 cmdという対話的なインスタンスを実行し、入力したかのようにふりをして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; 
    } 
関連する問題