2012-03-13 10 views
0

Processクラスを使用してコンソールアプリケーションと通信するときに問題があります。コンソールアプリケーションに複数のコマンドを送信できません

私が必要とするのは、コンソールにコマンドを書き込んで、応答を取得し、応答することです。しかし、コンソールに送信されるコマンドは、ストリームを閉じるときにのみ機能します。

Process.StandardInput.WriteLine("command"); 
Process.StandardInput.Close(); 

なぜですか?この後、もちろん、私は再びコンソールアプリケーションと通信することはできません。私は間違って何をしていますか?コンソールアプリケーションと通常どのように通信できますか?どんな助けでも大歓迎です。

答えて

2

が滑りやすい斜面のような音、私は違っそれに近づくために試してみたが、あなたは、このような方法で相互作用しなければならない場合、あなたはおそらく試みることができる:

Process.StandardInput.Flush(); 

の代わりに、クローズ();完全に終了したら、Close()だけを行い、すべてを破棄します。

+0

試しました。うまく行かなかった。私は、出力ストリームにのみ関連すると読んでいます。 – Peter17

+0

しかし、私が完全に終えることができる瞬間はありません。私はプログラムと常にコミュニケーションをとる必要があります(それは外部Sip発信者です)。 – Peter17

+0

私はあなたがしていることを正確には行っていませんが、理論的にはそれがうまくいき、標準入力に書きます。 http://msdn.microsoft.com/en-us/library/system.io.streamwriter.flush.aspxたとえば、ファイルストリームに書き込む場合、flushを呼び出すと、バッファ内のすべてのものがすぐに書き込まれるようになります。 – mikey

1

に記載されているようのStreamWriterを使用:

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.redirectstandardinput.aspx

2つのコンソールアプリケーション、次のコードで1作成:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var n = 0; 
     while (n < 5) 
     { 
      var line = Console.ReadLine(); 
      Console.WriteLine("Read line {0}: {1}", n, line); 
      n++; 
     } 
    } 
} 

そして以下を有するもの:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Process myProcess = new Process(); 

     myProcess.StartInfo.FileName = "ConsoleApplication1.exe"; 
     myProcess.StartInfo.UseShellExecute = false; 
     myProcess.StartInfo.RedirectStandardInput = true; 

     myProcess.Start(); 

     StreamWriter myStreamWriter = myProcess.StandardInput; 

     var n = 0; 
     while (n < 5) 
     { 
      myStreamWriter.WriteLine("line" + n.ToString()); 
      n++; 
     } 

     myStreamWriter.Close(); 
    } 
} 

結果は

です。
Read line 0: line0 
Read line 1: line1 
Read line 2: line2 
Read line 3: line3 
Read line 4: line4 
+0

StreamWriterを閉じます。しかし、私は同じことをすることはできません。なぜなら、アプリケーションとのさらなるコミュニケーションを確立するために必要になるからです。 – Peter17

+0

申し訳ありませんが、明確にする必要がありますが、複数のWriteLineを実行でき、別々の入力として受け入れられます。答えを更新します。 – Dirk

+0

したがって、私はProcess.BeginOutputReadLine()を使わないでください。 – Peter17

関連する問題