如何在C#中通过特定ID终止进程或重命名后按名称终止
两种方式终止特定C#进程
一、通过进程ID直接终止
这是最精准可靠的方式,只需明确目标进程的ID,即可直接定位并终止:
using System.Diagnostics; try { // 替换为你要终止的进程ID int targetProcessId = 1234; Process targetProcess = Process.GetProcessById(targetProcessId); // 终止进程 targetProcess.Kill(); // 可选:等待进程完全退出 targetProcess.WaitForExit(); } catch (ArgumentException) { Console.WriteLine("指定ID的进程不存在"); } catch (InvalidOperationException) { Console.WriteLine("无权限终止该进程或进程已退出"); }
注意事项
- 可通过任务管理器或
Process.GetProcessesByName("YourExeName")遍历获取所有同名进程的ID。 - 终止系统进程或高权限进程时,程序需以管理员身份运行。
二、通过自定义标识(替代重命名进程)
进程的可执行文件名无法在运行时修改,所谓"重命名进程"实际是给进程添加唯一标识,再通过标识筛选终止,以下是两种常用方案:
方案1:设置窗口标题(适用于带界面的程序)
在目标进程中设置唯一窗口标题,随后通过标题筛选:
目标进程代码(控制台/WinForm)
// 控制台程序设置标题 Console.Title = "MyApp_UniqueId_789"; // WinForm程序设置窗口标题 // this.Text = "MyApp_UniqueId_789";
控制进程代码(查找并终止)
using System.Diagnostics; foreach (Process process in Process.GetProcessesByName("YourExeName.exe")) { if (process.MainWindowTitle == "MyApp_UniqueId_789") { process.Kill(); process.WaitForExit(); break; } }
方案2:自定义环境变量(适用于所有类型程序)
启动进程时注入唯一环境变量,通过读取环境变量筛选:
启动目标进程时注入环境变量
using System.Diagnostics; ProcessStartInfo startInfo = new ProcessStartInfo("YourExeName.exe"); // 添加唯一标识环境变量 startInfo.EnvironmentVariables["MY_PROCESS_ID"] = "Unique_Tag_101"; Process.Start(startInfo);
控制进程读取环境变量并终止
需引用System.Management程序集来读取进程环境变量:
using System.Diagnostics; using System.Management; using System.Linq; foreach (Process process in Process.GetProcessesByName("YourExeName.exe")) { try { ManagementObject processObj = new ManagementObject($"Win32_Process.Handle='{process.Id}'"); processObj.Get(); string[] envVars = (string[])processObj["EnvironmentVariables"]; if (envVars.Any(var => var == "MY_PROCESS_ID=Unique_Tag_101")) { process.Kill(); process.WaitForExit(); break; } } catch (ManagementException) { // 无权限读取进程信息,跳过该进程 continue; } }
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

