Проблема заключается в том, как отслеживать процесс, который я запускаю из своего приложения.Как отслеживать процесс
Я делаю «пусковую установку», и я хотел бы отслеживать, когда программа, которую я запускаю, закрыта.
Я проверил эти ссылки, но я думаю, что это не совсем то же самое, что я пытаюсь, потому что процессы, которые я запускаю, - все они javaw.exe
, и мне нужно обрабатывать их по отдельности.
How to detect a process start & end using c# in windows?
Это как код выглядит сейчас:
{
Process proc = new Process();
proc.Exited += EclipseInstanceClosed;
proc.Disposed += EclipseInstanceDisposed;
// this property is a *.exe path: 'C:\eclipse\eclipseV4.4.1\eclipse.exe' for example
proc.StartInfo.FileName = SelectedEclipseInstance.Exec;
proc.StartInfo.UseShellExecute = true;
proc.Start();
}
...
void EclipseInstanceClosed(object sender, EventArgs e)
{
MessageBox.Show("Eclipse was closed!");
}
void EclipseInstanceDisposed(object sender, EventArgs e)
{
MessageBox.Show("Eclipse was disposed!");
}
Но эти события не возникает, когда я закрываю программу ,
Есть идеи?
Update:
Я также попытался это решение (why Process's Exited method not being called?) с proc.EnableRaisingEvents = true;
, но без успеха
Update II:
я модифицировал код так начинается процесс в рамках задачи. В этом случае события поднимаются. Какова причина?
LaunchEclipseProcess();
...
private async void LaunchEclipseProcess()
{
await Task.Run(() =>
{
Process proc = new Process();
proc.EnableRaisingEvents = true;
proc.StartInfo.UseShellExecute = true;
proc.Exited += EclipseInstanceClosed;
proc.Disposed += EclipseInstanceDisposed;
proc.StartInfo.FileName = SelectedEclipseInstance.Exec;
proc.Start();
});
}
Вы сохраняете ссылку на объект 'proc', который вы создаете? –
№ Объект создается в событии doubleclick. – blfuentes
Я думаю, что проблема в том, что когда вы выходите из блока кода, о котором вы упомянули, вы теряете ссылку на 'proc', и это сбор мусора. попробуйте определить свой «proc» вне вашего блока и проверить результат – dotctor