c# Externes Programm und Ausgabe auswerten

Hallo Forum,

ich habe diesen Thread noch einmal geöffnet, weil ich zu dem Thema noch eine Frage habe.

Mit folgendem Code wird der Output nicht in dem Dos-Fenster angezeigt sondern gepuffert und in der Variable gespeichert.

Code:
        Process compiler;
        compiler = new Process();
        compiler.StartInfo.FileName = "C:\\ldsgen.exe";
        compiler.StartInfo.Arguments = tblcode;
        compiler.StartInfo.UseShellExecute = false;
        compiler.StartInfo.RedirectStandardOutput = true;
        sortOutput = new StringBuilder(""); 
        compiler.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler); 
        compiler.StartInfo.RedirectStandardInput = true; 
        compiler.Start();
        StreamWriter sortStreamWriter = compiler.StandardInput; 
        string ldsoutput = compiler.StandardOutput.ReadToEnd();
        sortStreamWriter.Close(); 
        compiler.WaitForExit();
        compiler.Close();
Kann ich irgendwie erzwingen, dass der Output AUCH in dem Dos-Fenster angezeigt wird?


Vielen Dank,
Tobias
 
Ich bin selbst noch recht neu in Sachen C#, aber warum nicht einfach per System.Console.Write() oder System.Console.WriteLine() ausgeben? ;)
 
Hallo Dennis,

danke für deine Antwort.

Leider geht das so nicht.
Der Prozess dauert sehr lange (bis zu einer Stunde) und wirft aber direkt schon Text in das Dos-Fenster, welchen ich gerne direkt anzeigen würde.

Wenn ich das so mache wie du geschrieben hast, dann würde ich erst etwas sehen, nachdem der Prozess beendet ist.

Ich müsste irgendwie alles normal ausgeben und trotzdem das Ergebnis noch in eine Variable speichern können...

Tobias
 
Hallo zusammen,

ich habe in etwa das gleiche Problem, ich habe zurzeit ein Programm das zum Beispiel die Ping ausgaben in einer listbox anzeigen kann, alles funktioniert wunderbar, aktualisieren tut es sich auch schön, aber sobald ich das ganze ummodeliere und anstatt das ping.exe ffmpeg.exe aufrufe, funktioniert nix mehr. Das File wird zwar schön so wie ich es will konvertier, wenn... das File noch nicht besteht.

Aber das eigentliche Problem ist das lesen des Outputs.

Ich kapiere es einfach nicht, das es beim pingen funktioniert, beim umwandlen von Videos mittels ffmpeg aber nicht. Mache ich was falsch, oder ist soetwas nicht möglich, aus welchem Grund auch immer.

Grüsse Daniel

PS: mein bisheriger Code
Code:
            lst_txt.Items.Clear();
            try
            {
    /*           string arg = Environment.ExpandEnvironmentVariables("-i " + "\"" + txt_source.Text + "\"" + " -deinterlace -vcodec wmv2 " +
                    "-acodec wmav2 -b 5000kb -ab 128kb -r 29.97 -s 720x576 " + txt_target.Text + "\\" + filename);*/
                string arg = Environment.ExpandEnvironmentVariables("127.0.0.1");
                Process convert = new Process();

                convert.StartInfo.RedirectStandardOutput = true; 
                convert.StartInfo.UseShellExecute = false;
                convert.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                convert.StartInfo.CreateNoWindow = true;
                //convert.StartInfo.FileName = ffmpegPath;
                convert.StartInfo.FileName = "ping.exe";
                convert.StartInfo.Arguments = arg;
                convert.Start();
                
                StreamReader sr = convert.StandardOutput;
                
                while (sr.EndOfStream == false)
                {
                    string result = sr.ReadLine();
                    lst_txt.Items.Add(result);
                    lst_txt.Refresh();
                }
                convert.Close();
                lst_txt.Items.Add("Fertig");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message); return;
            }
 
Hei leute ich habe den Fehler bereits gefunden.
FFMpeg definiert die Ausgaben nicht als Standard Output, es wird als StandardError gehandelt :)

Grüsse
 

Neue Beiträge

Zurück