0

私のアプリケーションは、定期的にprocess.startでコンソールプログラムを開始します。私は "リアルタイム"でプログラムの出力を監視する必要があります。必ずしもCR/LFを使用しないプロセス標準出力を監視する

例えば、プログラムはコンソールに次のテキストを書き込みます:毎秒 処理.................

をかそこらの新しいドットができるように表示されますユーザはプログラムがまだ処理中であることを知る。しかし、プログラムがCR/LFを出力するまでは、プログラムの標準出力を取り出すことができません(まだ実行中です)。

出力をリアルタイムで取得するにはどうすればいいですか - たとえば、VB.NETのデータベースなどに出力しますか?

答えて

1

出力をテキストファイルに送信し、毎秒そのファイルを読み込むのはどうですか?

+0

残念ながら、私はコンソールアプリケーションを制御しません。また、コンソールアプリケーションがキャリッジリターン/改行(CRLF)を送信しない限り、データはまったくない(何か間違っているのですか?) – Mephisztoe

+1

@Tronex - 標準出力を取得できる場合は、ファイル。実際にプログラム自体を変更する必要はありません。出力をファイルにリダイレクトするためにプログラムが開始されたときに ">"演算子を使用するだけです。 –

1

私は自宅でこのようなことをしたプロトタイプのアプリケーションを持っていたので、私はうんざりしています。私はそれを取ることができるかどうかがわかります。一方で、このリンクを見て:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx

これは、例えば、カスタムストリームにアプリケーションの出力をリダイレクトする方法を示しています

Public Class Form1 

    Private _p As Process 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     Dim psi As New ProcessStartInfo() 

     psi.FileName = "C:\mydir.bat" 
     psi.RedirectStandardOutput = True 
     psi.UseShellExecute = False 

     _p = New Process() 
     _p.Start(psi) 
     tmrReadConsole.Enabled = True 
    End Sub 

    Private Sub tmrReadConsole_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrReadConsole.Tick 
     If _p IsNot Nothing Then 
      txtConsoleOutput.Text = _p.StandardOutput.ReadToEnd() 
     End If 

    End Sub 
End Class 

上記は、コンソールの出力ストリームをポーリングし、その内容をテキストボックスに取り込むために使用されるタイマーを持つWebフォームです。それは(なぜ私は私の他のアプリを見つけたいのですか)かなりうまくいかないが、あなたはそのアイデアを得る。

これが役に立ちます。

+0

ボタンのクリックのためにこれを試してみてください:\ MYDIR: ます。Private SubのButton1 Click(System.ObjectのとしてByVal送信者、System.EventArgsとしてByVal e)をButton1.Click _p =新しいプロセス _p.StartInfo.FileName =」Cを処理します「 _p.StartInfo.RedirectStandardOutput = Trueの _p.StartInfo.UseShellExecute = Falseの _p.Start() txtConsoleOutput.Text = _p.StandardOutput.ReadToEnd End Subの.BAT –