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

C# UDP远程服务端关闭指定进程异常:误杀进程问题排查

解决UDP服务端中进程关闭的误匹配问题

问题根源

当前代码用process.ProcessName.StartsWith(processName)做进程名匹配,这是前缀匹配逻辑,会误关闭所有进程名以目标字符串开头的程序(比如指定"calc"时,进程名是"calctool"的程序也会被误杀)。另外错误处理里的字符串插值存在语法错误,无法正确输出异常信息。

修复方案

  1. 精确匹配进程名:用string.Equals做完全匹配,同时指定忽略大小写(Windows系统下进程名不区分大小写)
  2. 优化进程查询:直接调用Process.GetProcessesByName获取目标进程,避免遍历系统所有进程,提升效率
  3. 修复异常日志:修正字符串插值的语法错误,确保异常信息能正确输出

修改后的代码

private void CloseApplications(string[] processNames)
{
    foreach (string processName in processNames)
    {
        // 直接获取指定名称的进程,避免遍历所有进程
        foreach (Process process in Process.GetProcessesByName(processName))
        {
            try
            {
                // 精确匹配进程名,忽略大小写
                if (string.Equals(process.ProcessName, processName, StringComparison.OrdinalIgnoreCase))
                {
                    if (!process.HasExited)
                    {
                        process.Kill();
                        UpdateLabel2("Exit");
                    }
                }
            }
            catch (Win32Exception ex)
            {
                UpdateLabel2($"Win32Exception: {ex.Message}");
            }
            catch (Exception ex)
            {
                // 修复字符串插值语法,添加$符号
                UpdateLabel2($"종료 실패: {ex.Message}");
            }
        }
    }
}

额外说明

  • Process.GetProcessesByName会自动忽略.exe后缀,传入"calc"就能匹配"calc.exe"的进程,符合常规使用需求
  • StringComparison.OrdinalIgnoreCase确保跨场景的大小写一致性,避免因进程名大小写差异导致匹配失败
  • 仅遍历目标进程而非系统所有进程,减少系统资源占用,同时降低访问无权限系统进程时的异常触发频率

内容的提问来源于stack exchange,提问作者HOON

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:05:17