que faire si le code ci-dessus renvoie une exception (un processus 32 bits ne peut pas accéder aux modules d'un processus 64 bits)?
Manish
40
Laissez ".exe". De MSDN: «Le nom du processus est un nom convivial pour le processus, comme Outlook, qui n'inclut pas l'extension .exe ou le chemin»
1
@AgainMe Process.Kill () envoie un signal d'arrêt à un processus, qui arrêtera son exécution où qu'il se trouve. Ceci est différent d'un signal d'interruption en ce que le processus n'aura aucune chance de répondre et / ou de nettoyer le signal. Aucune autre exécution ne se produira dans ce processus, et tous les verrous sur les ressources utilisées par ce processus seront libérés. Environment.Exit () est exécuté par le processus en cours d'exécution pour se tuer avec un code de réussite, ce qui est parfaitement sûr. Process.Kill () n'est pas aussi sûr que Environment.Exit ().
jchitel
2
Je suggère l'utilisation de LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro
2
Une option pour tuer une instance spécifique d'un processus? Je veux dire, Contains("Spotify"))tue toutes les instances de Spotify. Je veux tuer une instance particulière de Spotify.
Banee Ishaque K
38
Ma solution est d'utiliser Process.GetProcess () pour lister tous les processus.
En les filtrant pour contenir les processus que je veux, je peux ensuite exécuter la méthode Process.Kill () pour les arrêter:
var chromeDriverProcesses =Process.GetProcesses().Where(pr => pr.ProcessName=="chromedriver");// without '.exe'foreach(var process in chromeDriverProcesses){
process.Kill();}
Mettre à jour:
Si vous souhaitez utiliser une asyncapproche avec des méthodes récentes utiles des C# 8( Async Enumerables ), vérifiez ceci:
conststring processName ="chromedriver";// without '.exe'awaitProcess.GetProcesses().Where(pr => pr.ProcessName== processName).ToAsyncEnumerable().ForEachAsync(p => p.Kill());
Remarque: l'utilisation de asyncméthodes ne signifie pas toujours que le code s'exécutera plus rapidement, mais au moins cela ne fera pas perdre de temps au processeur et empêchera le thread de premier plan de se bloquer pendant les opérations. Dans tous les cas, vous devez réfléchir à la version que vous pourriez souhaiter.
Une drôle de coïncidence est que je cherchais dans ce fil une solution pour tuer le chromedriver. Doit être un problème courant.
kerl
Pareil ici. cela ne semble pas le résoudre cependant. La console initiale qui est déclenchée est en fait une instance de chrome.exe et je suppose que vous ne voulez pas forcer la fermeture de tous ceux-ci à moins qu'il ne
Vous pouvez tuer une instance spécifique de MS Word.
foreach(var process inProcess.GetProcessesByName("WINWORD")){// Temp is a document which you need to kill.if(process.MainWindowTitle.Contains("Temp"))
process.Kill();}
publicvoidEndTask(string taskname){string processName = taskname.Replace(".exe","");foreach(Process process inProcess.GetProcessesByName(processName)){
process.Kill();}}//EndTask("notepad");
Résumé : peu importe si le nom contient .exe, le processus se terminera. Vous n'avez pas besoin de "quitter .exe du nom du processus", cela fonctionne à 100%.
une simple .Replace(".exe", "")réponse votée en tête le ferait avec un code beaucoup moins compliqué et inutile
AndrewK
L'idée est de voir la méthode avec ou sans .exe afin que les gens puissent voir plusieurs façons de la gérer ... Ce n'est pas fait pour le copier-coller ....
Réponses:
Réponse rapide:
(laissez .exe hors du nom du processus)
la source
Contains("Spotify"))
tue toutes les instances deSpotify
. Je veux tuer une instance particulière deSpotify
.Ma solution est d'utiliser Process.GetProcess () pour lister tous les processus.
En les filtrant pour contenir les processus que je veux, je peux ensuite exécuter la méthode Process.Kill () pour les arrêter:
Mettre à jour:
Si vous souhaitez utiliser une
async
approche avec des méthodes récentes utiles desC# 8
( Async Enumerables ), vérifiez ceci:la source
Vous pouvez utiliser
Process.GetProcesses()
pour obtenir les processus en cours d'exécution, puisProcess.Kill()
pour tuer un processus.la source
Si vous avez l'ID de processus (
PID
), vous pouvez arrêter ce processus comme suit:la source
Vous pouvez tuer une instance spécifique de MS Word.
la source
Résumé : peu importe si le nom contient .exe, le processus se terminera. Vous n'avez pas besoin de "quitter .exe du nom du processus", cela fonctionne à 100%.
la source
.Replace(".exe", "")
réponse votée en tête le ferait avec un code beaucoup moins compliqué et inutile