2013-09-15 7 views
2

Я создаю новые процессы из своего приложения и хочу, чтобы эти процессы были убиты, когда/если мое приложение разбилось.Убить дочерний процесс, когда процесс приложения убит/разбит

Итак, я нашел это сообщение: Kill child process when parent process is killed. Я взял первый пример и скопировал весь код в новый класс под функцией public void Close().

Получена ошибка - имя Win32 не существует в текущем контексте, поэтому я добавил Microsoft.Win32 , а теперь другая ошибка - CloseHandle не распознается.

Тип или пространство имен имя «CloseHandle» не существует в пространстве имен «Microsoft.Win32» (пропущена ссылка на сборку?)

Как я могу это исправить?

+0

http://pinvoke.net/default.aspx/kernel32/CloseHandle.html –

+1

Возможный дубликат [ Убейте дочерний процесс, когда родительский процесс убит] (http://stackoverflow.com/questions/3342941/kill-child-process-when-parent-process-is-killed) – Dekay

ответ

3

простой или так приближаясь я считаю,

следить за всеми процессами, у начинающих.

ArrayList chilProcess_id = new ArrayList(); 

    public void process_starter() 
    {    
     Process p; 
     p = new System.Diagnostics.Process();   
     p.StartInfo.FileName = "YOUR PROCESS PATH"; 
     if (!p.Start()) 
      chilProcess_id.Add(p.Id); 
    } 

Теперь перед выходом, уничтожьте эти процессы.

public void exitApplication() 
    { 
     Process p; 
     foreach (int p_id in chilProcess_id) 
     { 
      p = Process.GetProcessById(p_id); 
      try 
      { 
       if(!p.HasExited) 
        p.Kill(); 
      } 
      catch (Exception e) 
      { 
       //Handle the exception as you wish 
      } 
     } 
    } 

для ArrayList добавить пространство имен

using System.Collections; 

для процесса добавления имен

using System.Diagnostics; 
Смежные вопросы