Fehlerkanal umleiten

mdo

Mitglied
Hallo!
Ich habe einen Dienst. In diesem Dienst starte ich einen Prozess. Der Fehlerkanal dieses Prozesses soll in eine Datei umgeleitet werden. Realisiert habe ich das bisher so (abgespeckt):

Code:
private StreamWriter swErr = new StreamWriter("C:\\error.log");

protected override void OnStart(string[] args)
        {           
            try
            {
                test= new Process();
                test.StartInfo.FileName = "C:\\test.exe";                       
                test.StartInfo.CreateNoWindow = true;
                test.StartInfo.UseShellExecute = false;
                test.StartInfo.RedirectStandardError = true;
                test.StartInfo.RedirectStandardOutput = true;
                test.ErrorDataReceived += new DataReceivedEventHandler(NetErrorDataHandler);                
                test.Start();
            }
            catch (Exception ex)
            {                
                //Fehler
            }
        }

private void NetErrorDataHandler(object sendingProcess, DataReceivedEventArgs errLine)
        {
            if (!String.IsNullOrEmpty(errLine.Data))
            {               
                swErr.WriteLine("---------------------------------------");
                swErr.WriteLine(DateTime.Now.ToString());  
                swErr.WriteLine(errLine.Data);
                swErr.Flush();
            }
        }


Aber: t nicht! Ich produzierte einen Fehler, aber das Programm geht nicht in die Fehlermethode (
Code:
NetErrorDataHandler
). Das Event scheint nicht gefeuert zu werden. Warum? Fehlt was?

Danke für den Input!

MfG
mdo
 
Du leitest sowohl den Standardoutput, als auch den Erroroutput um, aber du startest eigentlich nie ein asynchrones Einlesen der Informationen:

Nach dem Aufruf der Methode Start solltest du folgende Zeilen einfügen:

Code:
test.BeginOutputReadLine();
test.BeginErrorReadLine();

Weitere Informationen inklusive eines langen Beispiels findest du hier.
 
  • Gefällt mir
Reaktionen: mdo
Ja genau das ist das Problem! Habe es aber bereits letzte Woche selber gefunden ^^
Trotzdem danke für die vollkommen richtige Antwort!
 

Neue Beiträge

Zurück