Mam plik wykonywalny, który działa poprawnie, gdy uruchamiam go ręcznie, i istnieje tak jak powinien z oczekiwanym wynikiem. Ale kiedy uruchomię go za pomocą metody poniżej, zdarzenie Process.Exited nigdy nie jest uruchamiane. Zauważ, że nie pamiętał Process.EnableRaisingEventsProcess.Exited nie jest wywoływany, mimo że EnableRaisingEvents ma wartość true
protected override Result Execute(RunExecutable task)
{
var process = new Process();
process.StartInfo.Arguments = task.Arguments;
process.StartInfo.FileName = task.ExecutablePath;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.EnableRaisingEvents = true;
process.Exited += (sender, args) =>
{
processSync.OnNext(new Result
{
Success = process.ExitCode == 0,
Message = process.StandardOutput.ReadToEnd()
});
processSync.OnCompleted();
};
process.Start();
return processSync.First();;
}
Problem polega na tym samym, w przypadku korzystania z Process.WaitForExit() zamiast reaktywnych rozszerzeń, aby czekać na zdarzenia wyjściowego.
Również, jeśli uruchomię proces z innym argumentem, który produkuje inne wyjście, to jest w porządku.
Wydaje się, że ma to coś wspólnego z process.StartInfo.RedirectStandardOutput = true;
, ponieważ po wyłączeniu tego działa. Ale to może być tylko symptom innego problemu.
Każda pomoc jest mile widziana :-)
Arh, że wyjaśnia to! Dzięki :-) –