ฉันจะฆ่ากระบวนการที่ใช้งานอยู่โดยค้นหาชื่อไฟล์. exe ใน C # .NET หรือ C ++ ได้อย่างไร
ฉันจะฆ่ากระบวนการที่ใช้งานอยู่โดยค้นหาชื่อไฟล์. exe ใน C # .NET หรือ C ++ ได้อย่างไร
คำตอบ:
คำตอบที่รวดเร็ว:
foreach (var process in Process.GetProcessesByName("whatever"))
{
process.Kill();
}
(ออกจาก. exe จากชื่อกระบวนการ)
Contains("Spotify"))
ฆ่าอินสแตนซ์ทั้งหมดของSpotify
. ฉันต้องการฆ่าอินสแตนซ์เฉพาะของSpotify
.
วิธีแก้ปัญหาของฉันคือใช้Process.GetProcess ()เพื่อแสดงรายการกระบวนการทั้งหมด
ด้วยการกรองให้มีกระบวนการที่ฉันต้องการฉันจึงสามารถเรียกใช้เมธอดProcess.Kill ()เพื่อหยุดพวกเขา:
var chromeDriverProcesses = Process.GetProcesses().
Where(pr => pr.ProcessName == "chromedriver"); // without '.exe'
foreach (var process in chromeDriverProcesses)
{
process.Kill();
}
ปรับปรุง:
ในกรณีที่ต้องการใช้async
วิธีการกับวิธีการล่าสุดที่เป็นประโยชน์จากC# 8
( Async Enumerables ) ให้ตรวจสอบสิ่งนี้:
const string processName = "chromedriver"; // without '.exe'
await Process.GetProcesses()
.Where(pr => pr.ProcessName == processName)
.ToAsyncEnumerable()
.ForEachAsync(p => p.Kill());
หมายเหตุ: การใช้
async
วิธีการไม่ได้หมายความว่าโค้ดจะทำงานได้เร็วขึ้นเสมอไป แต่อย่างน้อยก็จะไม่เสียเวลาของ CPU และจะป้องกันไม่ให้เธรดเบื้องหน้าหยุดทำงานขณะดำเนินการ ไม่ว่าในกรณีใดคุณต้องคิดว่าคุณอาจต้องการเวอร์ชันใด
คุณสามารถใช้Process.GetProcesses()
เพื่อรับกระบวนการที่กำลังทำงานอยู่จากนั้นProcess.Kill()
เพื่อฆ่ากระบวนการ
หากคุณมี ID กระบวนการ ( PID
) คุณสามารถฆ่ากระบวนการนี้ได้ดังนี้:
Process processToKill = Process.GetProcessById(pid);
processToKill.Kill();
คุณสามารถฆ่าอินสแตนซ์เฉพาะของ 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");
สรุป : ไม่ว่าชื่อจะมี. exe กระบวนการจะสิ้นสุดลง คุณไม่จำเป็นต้อง "ออกจาก. exe จากชื่อกระบวนการ" มันทำงานได้ 100%
.Replace(".exe", "")
อยู่ด้านบนได้รับการโหวตคำตอบที่จะทำเช่นนี้ด้วยรหัสที่ซับซ้อนมากน้อยและไม่จำเป็น