2010-07-27 9 views
75

Wie kann ich einige aktive Prozesse durch Suchen nach ihren .exe-Dateinamen in C# .NET oder C++ beenden?Töte einige Prozesse durch .exe Dateiname

+1

Wenn Sie Kill-Prozess durch teilweisen Namen benötigen, siehe http://stackoverflow.com/questions/14632162/c-sharp-killing-a-process-by-a-part-of-its-name?rq=1 . –

Antwort

153

Schnell Antwort:

foreach (var process in Process.GetProcessesByName("whatever")) 
{ 
    process.Kill(); 
} 

(wegzulassen .exe von Prozessname)

+2

Vielen Dank .. –

+2

Was sollte tun, wenn obige Code-Rückgabe Ausnahme (ein 32-Bit-Prozesse können nicht auf Module eines 64-Bit-Prozesses zugreifen)? – Manish

+32

Lassen Sie ".exe" weg. Von MSDN: "Der Prozessname ist ein benutzerfreundlicher Name für den Prozess, z. B. Outlook, die die EXE-Erweiterung oder den Pfad nicht enthält" – slater

13

können Sie Process.GetProcesses() verwenden, um die laufenden Prozesse zu bekommen, dann Process.Kill() einen Prozess zu töten.

+6

Process.GetProcessesByName würde dies vereinfachen. – ConsultUtah

+0

Vielen Dank .. –

+0

Was sollte tun, wenn obige Code-Rückgabe Ausnahme (ein 32-Bit-Prozesse können nicht auf Module eines 64-Bit-Prozesses zugreifen)? – Manish

22

Meine Lösung ist:

var chromeDriverProcesses = Process.GetProcesses(). 
           Where(pr => pr.ProcessName == "chromedriver"); 

foreach (var process in chromeDriverProcesses) 
{ 
    process.Kill(); 
} 
+0

Sie könnten Enthält anstelle von –

+2

Lustiger Zufall verwenden In diesem Thread suchte ich nach einer Lösung, um den Chromtreiber zu töten. Muss ein häufiges Problem sein. – kerl

-2
public void EndTask(string taskname) 
    { 
     string processName = taskname; 
     string fixstring = taskname.Replace(".exe", ""); 

     if (taskname.Contains(".exe")) 
     { 
      foreach (Process process in Process.GetProcessesByName(fixstring)) 
      { 
       process.Kill(); 
      } 
     } 
     else if (!taskname.Contains(".exe")) 
     { 
      foreach (Process process in Process.GetProcessesByName(processName)) 
      { 
       process.Kill(); 
      } 
     } 
    } 

//EndTask("notepad"); 

Zusammenfassung: Ganz gleich, ob der Name enthält .exe wird der Prozess beendet. Sie müssen ".exe nicht vom Prozessnamen" weglassen. Es funktioniert 100%.

+0

ein einfaches '.Replace (". Exe "," ")' auf der oberen gewählten Antwort würde dies mit viel weniger verworrenen und unnötigen Code tun – AndrewK

+0

Die ganze Idee davon ist es, die Methode mit oder ohne .exe so Leute zu sehen kann mehrere Möglichkeiten sehen, damit umzugehen ... Es ist nicht zum Kopieren und Einfügen gedacht .... – user7993881