Hallo,
ich habe ein kleines Problem bei dem ich nicht weiter komme.
Habe ein kleines Programm geschrieben das Ausgaben in der Dos-Box macht, damit ich weiß wie das Programm abgelaufen ist.
Nun würde ich gerne alle Ausgaben, die das Programm in die Dos-Box schreibt in ein Log File schreiben lassen.
Kann man den Text in der Dos-Box irgendwie komplett kopieren und in einen String speichern ?
Hat jemand einen Tipp, wie ich das realiesieren kann?
Danke und Gruß
Andi
FileStream + StreamWriter Klassen, und einfach alles, was eingegeben wird in einen string speichern
sbertl
Sonst kannst du dein Programm auch so aufrufen:
cmd:> myProgr param > errorlog.txt
OK.
Werde mich jetzt erstmal mit der StreamWriter Klasse nochmal beschäftigen.
Danke
Hi,
habe mein Problem leider noch nicht gelöst.
Wie kann ich den Text, der in der DOS-BOX steht in einen String speichern?
Ich starte in meinem Programm den Windows Media Encoder, der nach dem Encoden ein Protokoll in die DOS-Box schreibt. Dieses würde ich gerne in eine LOG-File speichern.
Habe mich auf den Seiten von Microsoft schon erkundigt, aber nichts dazu gefunden.
Process myProcess = new Process();
ProcessStartInfo startInfo1 = new ProcessStartInfo("D:/EncodingServer/start1.bat");
startInfo1.WindowStyle = ProcessWindowStyle.Normal;
startInfo1.UseShellExecute = false;
startInfo1.RedirectStandardOutput = true;
startInfo1.CreateNoWindow = true;
Process.Start(startInfo1).WaitForExit();
StreamReader myStreamReader = myProcess.StandardOutput;
string myString = myStreamReader.ReadToEnd();
myProcess.Close();
Bei der folgenden Code-Zeile hängt er sich immer auf, da er irgendwie mit dem
(.StandardOutput) nicht klarkommt:
StreamReader myStreamReader = myProcess.StandardOutput;
Hat jemand einen Tipp für mich ?
Danke & Gruß
Bei der folgenden Code-Zeile hängt er sich immer auf, da er irgendwie mit dem
Welcher Fehler kommt denn?
sbertl
Hi,
man muss dieses StandardOutput nochmal extra anlegen:
public StreamReader StandardOutput { get; }
Habe aber noch nicht herausgefunden, wo ich dies hinschreiben muss und was noch alles dazu gehört.
Kannst du mir einen Tipp geben?
Gruß & Danke
Andi
Dafür gibt es schon fertige Tools wie z.B. MTEE (abgeleitet aus dem Unix Tee). Dieses kleine Programm gibt die Ausgabe "Deines" Dritt-Programmes in die Dos-Box + in ein von Dir gewähltes File aus.
Christof
public StreamReader StandardOutput { get; }
Das gehört genau dort hin, wo du auch eine Methode definieren würdest.
Aber in den get Block muss noch was rein, was, weiß ich aber nicht.
sbertl
Hallo zusammen,
StandardOutput ist eine Property von Process und muss nicht extra definiert werden.
herbivore
Hallo,
ich habe mich nochmals mit der StreamReader Klasse beschäftigt und habe immer noch das Problem mit diesem "StandardOutput".
Ich starte den Windows Media Encoder per .bat-Datei und nachdem der Encodierprozess abgeschlossen ist, kommt die Fehlermeldung:
StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.
Hier mein Quellcode:
public static void MediaEncoder()
{
Process myProcess = new Process();
ProcessStartInfo startInfo1 = new ProcessStartInfo("D:/EncodingServer/start1.bat");
startInfo1.WindowStyle = ProcessWindowStyle.Normal;
startInfo1.UseShellExecute = false;
startInfo1.RedirectStandardOutput = true;
startInfo1.CreateNoWindow = true;
Process.Start(startInfo1).WaitForExit();
StreamReader myStreamReader = myProcess.StandardOutput;
string myString = myStreamReader.ReadToEnd();
myProcess.Close();
Hat jemand eine Idee, was ich hier falsch mache?
Habe ich etwas übersehen?
Danke und Gruß
Andi
Hallo Andi123,
ist der MediaEncoder nicht ein Programm mit GUI? Wenn ja, gibt der doch vermutlich nichts auf StandardOutput aus.
herbivore
Original von Andi123
Fehlermeldung:
StandardOut wurde nicht umgeleitet, oder der Prozess wurde noch nicht gestartet.
Das ist auch völlig richtig, der Prozess myProcess wurde noch nicht gestartet!
Du mischst hier zwei Möglichkeiten zur Prozesserstellung:
In deinem Fall die schnellste Lösung:
Einfach ein "my" vor Process.Start 😉
Hallo zusammen,
Habe ein kleines Programm geschrieben das Ausgaben in der Dos-Box macht, damit ich weiß wie das Programm abgelaufen ist.
Vielleicht bin ich viel zu pragmatisch, aber ist es nicht wesentlich einfacher alle Ausgaben, die an die Console geschickt werden auch gleichzeitig in ein LogFile zu schicken, anstatt die Einträge zuerst an die Console zu schicken, dann aus der Console auszulesen, um sie dann in ein LogFile zu schreiben??
Also etwa so:
void MeineSchreibTextNachricht(string textZumSchreiben)
{
Console.WriteLine(textZumSchreiben);
meinLogFile.Append(textZumSchreiben);
}
Gruß
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”