Hallo zusammen,
über BeginOutputReadLine versuche ich eine Console-Ausgabe einer exe abzugreifen. (LogFile)
Hier die Sub dazu:
Leider fängt der OutputDataReceivedHandler die Ausgaben nicht während der exe-Laufzeit ab, sonder gibt die Lines erst bei Prozessende heraus.
Den String greife ich zur Laufzeit mit einem BackgroundWorker heraus, der jedoch bei verspäteter Stringausgabe nicht mehr greifen kann.
Dasselbe so in C# gecoded läuft einwandfrei - also die Lines werden über den OutputDataReceivedHandler in "Echtzeit" herausgegeben und mit dem BGW abgegriffen.
Irgendwas muss das mit den Starteigenschaften (?) der exe zu tun haben warum das in C# klappt und in VB nicht....
Danke für Infos.....
über BeginOutputReadLine versuche ich eine Console-Ausgabe einer exe abzugreifen. (LogFile)
Hier die Sub dazu:
Quellcode
- Private Sub StartImport()
- 'Dim Server As New Process ' >> Umgezogen in die DIMs : Private WithEvents Server As New Process
- Dim ProcessInfo As New ProcessStartInfo
- ' Absicherung das am Pfadende ein Backslash steht
- sV_Converter_Pfad = func_BackslashPruefung(sV_Converter_Pfad)
- 'Bedatung der converter-Routine
- Server.StartInfo.FileName = sV_Converter_Pfad & sConverter_ApplName
- ' Bedatung der Arguments
- Server.StartInfo.Arguments = _
- " -project " & sConverter_VAR_ProjectName & _
- " -in " & sConverter_VAR__Path_and_File & _
- " -out " & sV_Converter_VAR_Project_Path & _
- " -full " & _
- " -filetrace " & sConverter_VAR_filetrace & _
- " -consoletrace " & sConverter_VAR_consoletrace & _
- " -majornr " & sConverter_VAR_majornr & _
- " -minornr " & sConverter_VAR_minornr & _
- " -ignorecodefiles 0 " & _
- " -ignoreerror 0"
- Debug.Print("TS " & SubRoutinen02.funcTimeStamp() & ": " & Server.StartInfo.Arguments)
- ' lbl_Status_Info.Text = "Info: Projekt wird erstellt ... bitte warten ..."
- Server.EnableRaisingEvents = True
- Server.StartInfo.UseShellExecute = False
- Server.StartInfo.RedirectStandardOutput = True
- Server.StartInfo.CreateNoWindow = True
- AddHandler Server.OutputDataReceived, AddressOf OutputDataReceivedHandler
- AddHandler Server.Exited, AddressOf Server_Exited
- sortOutput = New StringBuilder()
- '#### Start eines neuen Prozesses um die Disabled-Funktionen durchführen zu können während die ImportRoutine läuft
- Server.Start()
- Debug.Print("TS " & SubRoutinen02.funcTimeStamp() & ": " & "Server.Start()")
- Server.BeginOutputReadLine()
- Debug.Print("TS " & SubRoutinen02.funcTimeStamp() & ": " & "server.BeginOutputReadLine()")
- Me.Invoke(Sub()
- Me.btn_StartImport.Enabled = False
- Me.btn_SYS.Enabled = False
- Me.btn_Optionen.Enabled = False
- Me.txtbx_Converter_VAR_PDX_Path_and_File.Enabled = False
- Me.txtbx_Converter_VAR_ProjectName.Enabled = False
- Me.FileDia_Converter_VAR_PDX_Path_and_File.Enabled = False
- Me.lbl_Loglevel.Enabled = False
- Me.NUpDn_LogLevel.Enabled = False
- Me.chkbx_ConsoleAktiv.Enabled = False
- End Sub)
- End Sub
Leider fängt der OutputDataReceivedHandler die Ausgaben nicht während der exe-Laufzeit ab, sonder gibt die Lines erst bei Prozessende heraus.
Den String greife ich zur Laufzeit mit einem BackgroundWorker heraus, der jedoch bei verspäteter Stringausgabe nicht mehr greifen kann.
Quellcode
- Private Sub OutputDataReceivedHandler(sendingProcess As Object, outLine As DataReceivedEventArgs) Handles Server.OutputDataReceived
- ' Collect the sort command output.
- Me.Invoke(Sub()
- Debug.Print("TS " & SubRoutinen02.funcTimeStamp() & ": " & "Aufruf > OutputDataReceivedHandler ")
- If Not String.IsNullOrEmpty(outLine.Data) Then
- Debug.Print("TS " & SubRoutinen02.funcTimeStamp() & ": " & "OutputDataReceivedHandler > String füllen ")
- numOutputLines += 1
- ' Add the text to the collected output.
- sortOutput.Append(Environment.NewLine + "[" _
- + numOutputLines.ToString() + "] - " _
- + outLine.Data)
- End If
- End Sub)
- End Sub
Dasselbe so in C# gecoded läuft einwandfrei - also die Lines werden über den OutputDataReceivedHandler in "Echtzeit" herausgegeben und mit dem BGW abgegriffen.
Irgendwas muss das mit den Starteigenschaften (?) der exe zu tun haben warum das in C# klappt und in VB nicht....
Danke für Infos.....