2015-09-08 4 views
1


Im пытается завершить каждый процесс с тем же именем, что и мой процесс, не убивая мой процесс. Это может быть немного запутанным, может быть, этот код поможет вам понять, что я имел в виду:Как завершать каждый процесс с текущим именем процесса, за исключением текущего процесса

private static void KillExistingProcesses() 
    { 
     Process[] p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); 
     foreach (var pro in p) 
     { 
      if (...) // if pro != Process.GetCurrentProcess() 
      pro.Kill(); 
     } 
    } 

Я попытался сделать это:

  if (!pro.Equals(Process.GetCurrentProcess()) 
      && pro != Process.GetCurrentProcess()) 

Но я до сих пор в конечном итоге прекращение мой собственный процесс.
Можете ли вы, ребята, помочь мне с этим? Мне просто нужно завершить каждый процесс с тем же именем моего процесса expet для текущего процесса.
Thank you :)

+2

Я бы подумал, что вам нужны те, где 'Process.ProcessName' равны, а' Process.Id' - разные. – juharr

ответ

2

Вы сравниваете Process объекты, не имеющие никакого отношения к определенному равенству.

Сравните идентификаторы процессов.

+0

Да, я понял, что спасибо за помощь, стараюсь делать то, что вы сказали! Редактировать: Он работает, спасибо! –

4

Вы можете оценить свой собственный идентификатор процесса, а затем, в петле, сравните его к элементу:

private static void KillExistingProcesses() 
    { 
     Process myProc = Process.GetCurrentProcess(); 
     ; 
     Process[] p = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName); 
     foreach (var pro in p) 
     { 
      if (pro.Id != myProc.Id) 
      { 
       pro.Kill(); 
      } 
     } 
    } 
+0

Да, спасибо, @usr сказал то же самое, и это сработало :) –

2

Вы можете использовать Linq, чтобы отфильтровать процессы с тем же Id

Process current = Process.GetCurrentProcess(); 
var processes = Process.GetProcessesByName(current.ProcessName) 
         .Where(p => p.Id != current.Id); 
foreach(var process in processes) 
{ 
    process.Kill(); 
}