Как определить, запущен ли объект процесса - PullRequest
1 голос
/ 30 июня 2011

Хотя у меня есть только информация о том, как получить все процессы, сохраните в Process[], но мне нужно:

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Start();

Ниже я создал объект процесса, теперь мне нужно знать, если этоПроцесс закрыт, именно этот, потому что если пользователь закрывается, и если я пытаюсь из кода proc.Exit();, он генерирует исключение.

Пока что я делаю так:

    Process procs = new Process();
    Process[] proc = Process.GetProcesses();
    foreach (Process p in proc)
    {
        if (p.Id = procs.Id)
        { 
            //Do Something
            break;
        }
    }

Ответы [ 2 ]

4 голосов
/ 30 июня 2011

Просто используйте HasExited на вашем Process объекте:

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Start();

// do something

if(proc.HasExited)
    // notepad was closed

Или, если вы хотите получать уведомления, как только процесс будет закрыт, используйте Exited событие:

Process proc = new Process();
proc.startInfo.FileName = "notepad.exe";
proc.Exited += ProcessExited;
proc.Start();

private void ProcessExited(object sender, EventArgs e)
{
    // notepad was closed
}
2 голосов
/ 30 июня 2011

Добавьте эту строку:

proc.Exited += new EventHandler(proc_Exited);

Тогда такой метод:

void proc_Exited(object sender, EventArgs e)
{
    //process has ended..
}

Вы можете иметь свой собственный глобальный флаг и поднять его в обработчике или обработать его «вживую», зависито том, какова ваша конечная цель.

...