Ich laufe in eine seltsame Sache und kann nicht den Grund finden, warum dies geschieht.Start Prozess von Service hängt UseShellExecute false
Ich habe eine service.exe, wo ich Daten aus der Konfigurationsregistrierung sammeln und dann n Prozesse starten.
Beispielcode:
_mProcess.StartInfo = new ProcessStartInfo
{
FileName = Command,
Arguments = Argument,
WorkingDirectory = WorkDir
};
_mProcess.Start();
Pid = _mProcess.Id;
Mein Pid
enthält die Prozess-ID.
Jetzt habe ich UseShellExecute = false
hinzugefügt, um den StandardOutput zu bekommen.
Neuer Beispielcode:
_mProcess.StartInfo = new ProcessStartInfo
{
FileName = Command,
Arguments = Argument,
WorkingDirectory = WorkDir //,
//CreateNoWindow = true,
UseShellExecute = false,
//RedirectStandardOutput = true,
RedirectStandardError = true
//RedirectStandardInput = true
};
_mProcess.Start();
Pid = _mProcess.Id;
using (var reader = _mProcess.StandardError)
{
_logger.ToLog("", Company, reader.ReadToEnd(), "RCluster.log", "service");
}
In diesem Fall wird der Prozess einen Fehler wieder zurück, das ich meine Log-Datei speichern kann.
Problem: Dieser Code ist Teil einer Methode, um einen Prozess zu starten, den ich viele Male aufrufen (hängt von meiner Konfiguration ab). Also mit diesem Code wird der erste Prozess aufgerufen, die folgenden Prozesse nicht. Irgendwie warten die Dienste jetzt auf den ersten Dienst. Ich dachte, das passiert nur mit WaitForExit
.
So, wie ich Standardfehlerausgabe erhalten kann, aber nicht den Prozessblock meine Hauptaufgabe machen, um fortzufahren?
Ihr Prozess wartet darauf, dass der Fehlerleser das Ende des Streams findet, sodass er blockiert wird, bis der Prozess abgeschlossen ist. Starten Sie die Fehlerverarbeitung in einem anderen Thread oder einer asynchronen Task. – Gusman