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

Ausgedruckt am: 28.03.2024 um 16:03 Uhr

Mitglied: 131026
131026 06.10.2016 aktualisiert um 23:05:21 Uhr
Goto Top
Hi,
setz mal die Eigenschaft
 .StartInfo.CreateNoWindow = True 
im process object.

R.
Mitglied: emeriks
emeriks 07.10.2016 um 08:50:52 Uhr
Goto Top
@131026
Habe das schon probiert. Beide Zustände. Es ändert nichts.
Mitglied: 131026
131026 07.10.2016 um 09:09:45 Uhr
Goto Top
Mitglied: emeriks
emeriks 07.10.2016 um 09:26:39 Uhr
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!