2017-09-11 8 views
1

私はこのコードでcmdコマンドを実行しましたが、ver、cd ...のようなコマンドの大部分でうまく動作しますが、netstatやdirなどのコマンドで多数のファイルがあるフォルダでは、コマンドは終了しました。C#からcmdコマンドの終了を正しく検出できませんか?

私はタイムアウトを使用することができますが、それは、netstatコマンドの終了を検出することができない理由を私は知りたい

string results=""; 
string command = @"dir c:\windows"; 
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd", "/c " + command); 
procStartInfo.RedirectStandardInput = true; 
procStartInfo.RedirectStandardOutput = true; 
procStartInfo.RedirectStandardError = true; 
procStartInfo.UseShellExecute = false; 
procStartInfo.CreateNoWindow = true; 
Process proc = new Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 

results = proc.StandardOutput.ReadToEnd(); //<-Move here 

proc.WaitForExit(); 

//results = proc.StandardOutput.ReadToEnd(); //Moved 

Console.WriteLine(results); 

修正:
私は結果を読んで移動し(結果= proc.StandardOutput.ReadToEnd() ;)それは問題を解決する。私は問題を再現することができませんでしたあなたのコードでは

+1

netstatはexeです。 cmdで起動する必要はありません。たぶんそれはあなたが出力を読むために読むのに役立ちます – gsharp

答えて

0

:あなたが言っている何

enter image description here

Process.WaitForExit()を使用して、ことはできません。

は無期限に待機するプロセス・コンポーネントに指示します関連するプロセスが終了するようにします。


編集1:

がさえ(分を引き継いだ)dir c:\Windowsを使用して、私は問題を再現することができませんでした。

+0

あなたはいくつかの接続があればそれはうまく動作しますが、多くの接続があればそれは動作しません。文字列command = @ "dir c:\ windows"のような別のコマンドを使うことができます。それは同じ問題を抱えています。 – Pouya

+0

使用している.netとOSのバージョンは? – Pouya

+0

Windows 7、.net 4.7 –

関連する問題