You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:35:04