Причина этого в том, что System.Diagnostics.Process
буквально отслеживает только процесс, к которому он подключен.
Один из способов обойти эту проблему - вывести первое приложение, когда оно запускает второе приложение, и когда этот вывод получен, контролировать из основного приложения, что процесс создания из (сейчасв-третьих) приложение.После запуска третьего приложения оно должно появиться в массиве System.Diagnostics.Process.GetProcesses()
, и вы можете присоединиться к его событию OutputDataReceived
.
Ваш код будет выглядеть примерно так (не проверено):
private void firstProcess_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
if (e.Data == "Starting next process")
{
System.Diagnostics.Process newProcess = null;
while (newProcess == null)
{
System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process proc in procs)
{
if (proc.ProcessName == "newProcess")
{
newProcess = proc;
break;
}
}
System.Threading.Thread.Sleep(100);
}
newProcess.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(newProcess_OutputDataReceived);
}
}
void newProcess_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{
// Do something with your data received here.
}
Обратите внимание, что это всего лишь пример, и если ваш третий процесс не запускается или заканчивается слишком быстро, тоэтот метод будет висеть в бесконечном цикле.Этот пример просто предназначен для того, чтобы дать вам знания для создания чего-то, что работает в вашем конкретном случае, с которым я не совсем знаком.Вы должны как минимум убедиться, что цикл while не будет продолжаться вечно, и вам, вероятно, захочется также сделать несколько других настроек.
РЕДАКТИРОВАТЬ: Альтернативно, если вы не можете изменить источникДля первого приложения вы можете просто создать новый поток, который отслеживает таким образом (используя цикл while) и обрабатывать выходные данные третьего процесса в отдельном классе, или просто перенаправить выходные данные третьего процесса вобработчик для вывода второго процесса, чтобы вы могли иметь один метод, обрабатывающий весь вывод для обоих процессов.