Laden...

Text aus DosBox kopieren

Erstellt von Andi123 vor 17 Jahren Letzter Beitrag vor 17 Jahren 6.860 Views
A
Andi123 Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren
Text aus DosBox kopieren

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

822 Beiträge seit 2005
vor 17 Jahren

FileStream + StreamWriter Klassen, und einfach alles, was eingegeben wird in einen string speichern

sbertl

M
1.439 Beiträge seit 2005
vor 17 Jahren

Sonst kannst du dein Programm auch so aufrufen:
cmd:> myProgr param > errorlog.txt

A
Andi123 Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

OK.
Werde mich jetzt erstmal mit der StreamWriter Klasse nochmal beschäftigen.

Danke

A
Andi123 Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

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ß

822 Beiträge seit 2005
vor 17 Jahren

Bei der folgenden Code-Zeile hängt er sich immer auf, da er irgendwie mit dem

Welcher Fehler kommt denn?

sbertl

A
Andi123 Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

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

C
159 Beiträge seit 2005
vor 17 Jahren

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

822 Beiträge seit 2005
vor 17 Jahren
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

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo zusammen,

StandardOutput ist eine Property von Process und muss nicht extra definiert werden.

herbivore

A
Andi123 Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Andi123,

ist der MediaEncoder nicht ein Programm mit GUI? Wenn ja, gibt der doch vermutlich nichts auf StandardOutput aus.

herbivore

T
13 Beiträge seit 2006
vor 17 Jahren

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:

  1. Prozess-Instanz erstellen, deren Startinfo einstellen und ausführen
  2. Statisches Process.Start, das eine Prozess-Instanz zurückgibt

In deinem Fall die schnellste Lösung:
Einfach ein "my" vor Process.Start 😉

4.506 Beiträge seit 2004
vor 17 Jahren

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!”