0

我的應用程序定期啓動帶有process.start的控制檯程序。我需要「實時」監控程序的輸出。監視進程標準輸出不一定使用CR/LF

例如,程序寫入以下文本控制檯: 處理.................

每一秒左右,一個新的點出現,讓用戶知道該程序仍在處理中。但是,...直到程序輸出CR/LF,我無法檢索程序的標準輸出(它仍在運行時)。

我能做些什麼來實時獲得輸出 - 比方說,比如在VB.NET中將它輸入數據庫中?

回答

1

如何將輸出發送到文本文件並每秒讀取該文件?

+0

不幸的是,我不控制控制檯應用程序。另外,除非控制檯應用程序發送回車/換行符(CRLF),否則我不會提供任何數據(或者我是否做錯了什麼?) – Mephisztoe 2009-06-29 14:45:23

+1

@Tronex - 如果您可以獲得標準輸出,則可以將其重定向到一份文件。您實際上並不需要更改程序本身,只需在程序開始將輸出重定向到文件時使用「>」運算符即可。 – 2009-06-29 14:49:47

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 

以上是一個webform,它具有一個計時器,用於輪詢控制檯的輸出流並將其內容放入文本框中。它不工作(因此我想找到我的其他應用程序),但你明白了。

希望這會有所幫助。

相關問題