emeriks
Goto Top

VB.Net - Problem mit Umleitung der Standard-Ausgabe

Hi,
habe eine Consolen-Anwendung in VB.Net, welche nichts anderes tut, als in der Console "Hallo Welt!" auszugeben.
Habe weiterhin eine Forms-Anwendung, welche diese Consolen-Anwendung mit Umleitung der Standard-Ausgabe aufruft und versucht, die Ausgabe einzulesen. Und das geht nicht.

ConsolenAnwendung1
Module Main
  Sub Main()
    Console.WriteLine("Hallo Welt!")  
  End Sub
End Module

Forms-Anwendung
Dim Dump As String = Nothing
With New Process
  .StartInfo.FileName = "....\ConsolenAnwendung1.exe"  
  .StartInfo.UseShellExecute = False
  .StartInfo.RedirectStandardOutput = True
  .Start
  .WaitForExit
  Dump = .StandardOutput.ReadToEnd
End With

Führe ich die ConsolenAnwendung direkt aus, dann kommt hübsch "Hallo Welt!", wie es sein soll.
Führe ich die Forms-Anwendung aus, dann kommt der Code bis zum Process.Start. Die "ConsolenAnwendung1.exe" erscheint dann auch im Task-Manager. Und nix passiert.
ConsolenAnwendung1 beendet sich nicht.

Beende ich ConsolenAnwendung1 über den Task-Manager, dann macht die Forms-Anwendung weiter, kann dann aber logischerweise die Ausgabe nicht mehr einlesen.

Habe dann in der ConsolenAnwendung1 je vor und nach dem "Console.WriteLine("Hallo Welt!")" eine MsgBox eingebaut. Die erste kommt noch, die zweite nicht mehr.

Beende ich die Forms-Anwendung, dann macht auch die ConsolenAnwendung1 weiter und bringt die 2. MsgBox.

Ich habe das Ganze mal mit dem Aufruf von "cmd.exe /c dir c:\" aus der Forms-Anwendung getestet. Damit funktioniert das. D.h. der Fehler liegt in meiner Consolen-Anwendung.

Was mache ich da falsch? Was muss ich in der Consolen-Anwendung ändern, damit diese auch bei umgeleiteter Standard-Ausgabe mit dem Console.WriteLine weitermacht?

E.

Content-Key: 317060

Url: https://administrator.de/contentid/317060

Printed on: April 24, 2024 at 03:04 o'clock

Mitglied: 131026
131026 Oct 06, 2016 updated at 21:05:21 (UTC)
Goto Top
Hi,
setz mal die Eigenschaft
 .StartInfo.CreateNoWindow = True 
im process object.

R.
Member: emeriks
emeriks Oct 07, 2016 at 06:50:52 (UTC)
Goto Top
@131026
Habe das schon probiert. Beide Zustände. Es ändert nichts.
Mitglied: 131026
131026 Oct 07, 2016 at 07:09:45 (UTC)
Goto Top
Member: emeriks
emeriks Oct 07, 2016 at 07:26:39 (UTC)
Goto Top
Ich habe es jetzt selbst gefunden.

In meiner Verzweiflung habe ich jetzt Zeile für Zeile in Frage gestellt. Wenn ich in der Forms-Anwendung das ".WaitForExit" raus nehme (Zeile 7), dann geht es.
Ich verstehe es nicht wirklich. Zumal der Debuger schon beim Start-Befehl stehen bleibt, gar nicht mehr auf das WaitForExit springt. Aber egal, ich komme weiter.

Trotzdem Danke!