apa yang harus dilakukan jika kode di atas mengembalikan Exception (proses 32 bit tidak dapat mengakses modul dari proses 64 bit)?
Manish
40
Tinggalkan ".exe". Dari MSDN: "Nama proses adalah nama yang bersahabat untuk proses, seperti Outlook, yang tidak menyertakan ekstensi .exe atau jalur"
1
@AgainMe Process.Kill () mengirimkan sinyal kill ke proses, yang akan menghentikan eksekusinya di mana pun itu terjadi. Ini berbeda dari sinyal interupsi di mana proses tidak akan memiliki kesempatan untuk merespons dan / atau membersihkan sinyal. Tidak ada lagi eksekusi yang akan terjadi dalam proses itu, dan semua kunci pada sumber daya yang digunakan oleh proses itu akan dilepaskan. Environment.Exit () dilakukan oleh proses yang saat ini dijalankan untuk mematikan dirinya sendiri dengan kode sukses, yang sangat aman. Process.Kill () hampir tidak seaman Environment.Exit ().
jchitel
2
Saya menyarankan penggunaan LINQ: var procs = Process.GetProcesses (). Where (pr => pr.ProcessName.Contains ("Spotify"));
Leandro
2
Adakah pilihan untuk menghentikan proses tertentu? Maksud saya, Contains("Spotify"))membunuh semua contoh Spotify. Saya ingin membunuh contoh tertentu dari Spotify.
Banee Ishaque K
38
Solusi saya adalah menggunakan Process.GetProcess () untuk mendaftar semua proses.
Dengan memfilternya agar berisi proses yang saya inginkan, saya kemudian dapat menjalankan metode Process.Kill () untuk menghentikannya:
var chromeDriverProcesses =Process.GetProcesses().Where(pr => pr.ProcessName=="chromedriver");// without '.exe'foreach(var process in chromeDriverProcesses){
process.Kill();}
Memperbarui:
Jika ingin menggunakan asyncpendekatan dengan beberapa metode terbaru yang berguna dari C# 8( Async Enumerables ), periksa ini:
conststring processName ="chromedriver";// without '.exe'awaitProcess.GetProcesses().Where(pr => pr.ProcessName== processName).ToAsyncEnumerable().ForEachAsync(p => p.Kill());
Catatan: menggunakan asyncmetode tidak selalu berarti kode akan berjalan lebih cepat, tetapi setidaknya itu tidak akan membuang waktu CPU dan akan mencegah thread latar depan menggantung saat melakukan operasi. Bagaimanapun, Anda perlu memikirkan versi apa yang mungkin Anda inginkan.
Kebetulan yang lucu adalah, saya sedang mencari solusi di thread ini untuk membunuh chromedriver. Pasti masalah umum.
kerl
Sama disini. itu sepertinya tidak menyelesaikannya. Konsol awal yang dimatikan sebenarnya adalah turunan dari chrome.exe dan saya rasa Anda tidak ingin menutup paksa semua itu kecuali itu adalah agen pembuat / uji
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");
Ringkasan : tidak peduli jika namanya mengandung .exe, prosesnya akan berakhir. Anda tidak perlu "meninggalkan .exe dari nama proses", Ini berfungsi 100%.
.Replace(".exe", "")jawaban sederhana di atas yang dipilih akan melakukan ini dengan kode yang jauh lebih berbelit-belit dan tidak perlu
AndrewK
Ide keseluruhannya adalah untuk melihat metode dengan atau tanpa .exe sehingga orang dapat melihat berbagai cara untuk menanganinya ... Ini tidak dimaksudkan untuk menyalin dan menempel ....
Jawaban:
Jawaban cepat:
(tinggalkan .exe dari nama proses)
sumber
Contains("Spotify"))
membunuh semua contohSpotify
. Saya ingin membunuh contoh tertentu dariSpotify
.Solusi saya adalah menggunakan Process.GetProcess () untuk mendaftar semua proses.
Dengan memfilternya agar berisi proses yang saya inginkan, saya kemudian dapat menjalankan metode Process.Kill () untuk menghentikannya:
Memperbarui:
Jika ingin menggunakan
async
pendekatan dengan beberapa metode terbaru yang berguna dariC# 8
( Async Enumerables ), periksa ini:sumber
Anda dapat menggunakan
Process.GetProcesses()
untuk mendapatkan proses yang sedang berjalan, kemudianProcess.Kill()
menghentikan proses.sumber
Jika Anda memiliki ID proses (
PID
), Anda dapat menghentikan proses ini sebagai berikut:sumber
Anda dapat Membunuh contoh tertentu dari MS Word.
sumber
Ringkasan : tidak peduli jika namanya mengandung .exe, prosesnya akan berakhir. Anda tidak perlu "meninggalkan .exe dari nama proses", Ini berfungsi 100%.
sumber
.Replace(".exe", "")
jawaban sederhana di atas yang dipilih akan melakukan ini dengan kode yang jauh lebih berbelit-belit dan tidak perlu