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ć asyncpodejś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
asyncmetod 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