如何在C# WinForms中终止文件夹及其子文件夹内的所有进程?
在WinForms中终止指定文件夹及其子文件夹下所有运行程序的最简方法
核心思路是遍历系统所有运行中的进程,校验进程的启动文件路径是否落在目标文件夹(含子文件夹)范围内,匹配成功则终止进程,这种方式无需预先指定进程名,能自动适配文件夹内新增的程序。
实现代码
using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; namespace WinFormsProcessManager { public partial class MainForm : Form { private void TerminateFolderProcesses(string targetDirectory) { // 标准化目标路径,统一格式以避免匹配误差 string normalizedTarget = Path.GetFullPath(targetDirectory).TrimEnd(Path.DirectorySeparatorChar) + Path.DirectorySeparatorChar; foreach (Process proc in Process.GetProcesses()) { try { // 获取进程主程序的完整路径 string procPath = proc.MainModule.FileName; string normalizedProcPath = Path.GetFullPath(procPath); // 校验进程路径是否属于目标文件夹或其子目录 if (normalizedProcPath.StartsWith(normalizedTarget, StringComparison.OrdinalIgnoreCase)) { // 优先尝试优雅关闭程序,失败则强制终止 if (!proc.CloseMainWindow()) { proc.Kill(); } // 等待1秒确保进程退出(可选) proc.WaitForExit(1000); } } catch (Exception ex) { // 跳过无法访问的进程(如系统进程、权限受限进程) Debug.WriteLine($"跳过进程 {proc.ProcessName}: {ex.Message}"); } } } // 示例调用:按钮点击事件触发 private void btnTerminate_Click(object sender, EventArgs e) { string targetFolder = @"D:\Apps\TargetFolder"; // 替换为你的目标文件夹 TerminateFolderProcesses(targetFolder); MessageBox.Show("指定文件夹下的进程已处理完成"); } } }
关键注意事项
- 权限要求:程序需要以管理员权限运行,否则可能无法访问部分系统进程的路径,或无法终止受保护的进程。
- 异常处理:必须捕获异常,因为部分进程(如系统核心进程)不允许外部程序读取其路径或终止操作。
- 终止逻辑:先用
CloseMainWindow()给程序机会保存数据,仅当程序无响应时再调用Kill()强制终止,避免数据丢失。 - 路径匹配:通过
Path.GetFullPath()标准化路径,结合StringComparison.OrdinalIgnoreCase忽略大小写,确保匹配的准确性。
内容的提问来源于stack exchange,提问作者Dwayne_The_Rock_Johnson
相关产品推荐
相关产品推荐

