Come posso uccidere alcuni processi attivi cercando i loro nomi di file .exe in C # .NET o C ++?
Come posso uccidere alcuni processi attivi cercando i loro nomi di file .exe in C # .NET o C ++?
Risposte:
Risposta rapida:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(tralascia .exe dal nome del processo)
Contains("Spotify"))
uccide tutte le istanze di Spotify
. Voglio uccidere una particolare istanza di Spotify
.
La mia soluzione è usare Process.GetProcess () per elencare tutti i processi.
Filtrandoli per contenere i processi che desidero, posso quindi eseguire il metodo Process.Kill () per fermarli:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
Aggiornare:
Nel caso in cui si desideri utilizzare l' async
approccio con alcuni utili metodi recenti da C# 8
( Enumerabili asincroni ), controllare questo:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
Nota: l'utilizzo di
async
metodi non significa sempre che il codice verrà eseguito più velocemente, ma almeno non sprecherà il tempo della CPU e impedirà al thread in primo piano di bloccarsi durante le operazioni. In ogni caso, devi pensare a quale versione potresti volere.
Puoi usare Process.GetProcesses()
per ottenere i processi attualmente in esecuzione, quindi Process.Kill()
per terminare un processo.
Puoi uccidere un'istanza specifica di 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");
Riepilogo : non importa se il nome contiene .exe, il processo terminerà. Non è necessario "tralasciare .exe dal nome del processo", funziona al 100%.
.Replace(".exe", "")
risposta votata in alto lo farebbe con un codice molto meno contorto e non necessario