Jak mogę zabić niektóre aktywne procesy, wyszukując ich nazwy plików .exe w C # .NET lub C ++?
Jak mogę zabić niektóre aktywne procesy, wyszukując ich nazwy plików .exe w C # .NET lub C ++?
Odpowiedzi:
Szybka odpowiedź:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(zostaw .exe z nazwy procesu)
Contains("Spotify"))
zabija wszystkie instancje Spotify
. Chcę zabić konkretną instancję Spotify
.
Moim rozwiązaniem jest użycie Process.GetProcess () do wyświetlenia wszystkich procesów. Filtrując
je tak, aby zawierały procesy, które chcę, mogę następnie uruchomić metodę Process.Kill () , aby je zatrzymać:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
Aktualizacja:
W przypadku, gdy chcesz użyć async
podejścia z kilkoma przydatnymi najnowszymi metodami z C# 8
( Async Enumerables ), sprawdź to:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
Uwaga: używanie
async
metod nie zawsze oznacza, że kod będzie działał szybciej, ale przynajmniej nie zmarnuje czasu procesora i zapobiegnie zawieszaniu się wątku pierwszego planu podczas wykonywania operacji. W każdym razie musisz się zastanowić, jakiej wersji możesz potrzebować.
Możesz użyć, Process.GetProcesses()
aby pobrać aktualnie uruchomione procesy, a następnie Process.Kill()
zabić proces.
Możesz zabić określoną instancję MS Word.
foreach (var process in Process.GetProcessesByName("WINWORD"))
{
// Temp is a document which you need to kill.
if (process.MainWindowTitle.Contains("Temp"))
process.Kill();
}
public void EndTask(string taskname)
{
string processName = taskname.Replace(".exe", "");
foreach (Process process in Process.GetProcessesByName(processName))
{
process.Kill();
}
}
//EndTask("notepad");
Podsumowanie : bez względu na to, czy nazwa zawiera .exe, proces się zakończy. Nie musisz "zostawiać .exe z nazwy procesu", to działa w 100%.
.Replace(".exe", "")
odpowiedź głosowana na górze wystarczyłaby do tego z dużo mniej zawiłym i niepotrzebnym kodem