ich möchte die Konsole im Hintergrund ausführen um einen Download über das Konsolenprogramm "rtmpdump" zu realisieren.
Wenn ich rtmpdump händisch über die Konsole starte und einen entsprechenden Link mitliefere, wird gedownloaded. Der aktuelle Fortschritt (in %) wird am Ende des Konsolenfensters angezeigt. Das soll jetzt automatisiert geschehen und der aktuellen Fortschritt in % soll auf einer Form erscheinen.
Ein Konsolenfenster im Hintergrund starte ich derzeit so:
System.Diagnostics.Process myProc = new System.Diagnostics.Process();
myProc.StartInfo.FileName = Environment.GetEnvironmentVariable("COMSPEC");
myProc.StartInfo.CreateNoWindow = true;
myProc.StartInfo.RedirectStandardInput = true;
myProc.StartInfo.RedirectStandardOutput = true;
myProc.StartInfo.UseShellExecute = false;
myProc.Start();
Jetzt erstelle ich einen Reader und Writer um in das Konsolenfenster zu schreiben und es auszulesen:
System.IO.StreamWriter myWriter;
System.IO.StreamReader myReader;
myWriter = myProc.StandardInput;
myWriter.AutoFlush = true;
Dann setzte ich die Befehle (dlString ist ein string mit einem Aufruf von rtmpdump.exe und einem Downloadpfad) in der Konsole ab:
myWriter.WriteLine("ECHO ON");
myWriter.WriteLine("cd bib");
myWriter.WriteLine(dlString);
Soweit funktioniert - scheinbar - alles. Zonealarm meldet sich und frägt ob rtmpdump.exe in das Internet kommunizieren darf.
Und nun möchte ich die Konsole alle paar Sekunden komplett mit dem Reader auslesen, und hier klemmts. Ich versuche es im Moment so:
myReader = myProc.StandardOutput;
string tmp = "";
tmp = myReader.ReadToEnd();
tmp = System.Text.Encoding.GetEncoding(850).GetString(System.Text.Encoding.Default.GetBytes(tmp));
MessageBox.Show(tmp);
Wenn ich den letzten Teil ausführe hängt die komplette Form.. liegt das irgendwie an dem ReadToEnd() ? Wenn ich beim Writer noch ein "WriteLine("EXIT")" dranhänge, dann funktioniert es, aber nur EINMAL. Und gedownloaded wird auch nix. Bin ratlos
Vielleicht weiß ja jemand weiter?!
LG,
Micha