当前位置: 首页 > news >正文

C#/.NET 如何结束掉一个进程

本文介绍如何结束掉一个进程。


本文内容

    • 结束掉特定名字的进程
    • 结束掉自己

结束掉特定名字的进程

ProcessInfo 中有 Kill 实例方法可以调用,也就是说如果我们能够拿到一个进程的信息,并且对这个进程拥有访问权限,那么我们就能够结束掉它。

使用 Process.GetProcessesByName(processName) 可以按照名字拿到进程信息。于是我们可以使用这个方法杀掉具有特定名称的进程。

private void KillProcess(string processName)
{
    foreach (var process in Process.GetProcessesByName(processName))
    {
        try
        {
            // 杀掉这个进程。
            process.Kill();

            // 等待进程被杀掉。你也可以在这里加上一个超时时间(毫秒整数)。
            process.WaitForExit();
        }
        catch (Win32Exception ex)
        {
            // 无法结束进程,可能有很多原因。
            // 建议记录这个异常,如果你的程序能够处理这里的某种特定异常了,那么就需要在这里补充处理。
            // Log.Error(ex);
        }
        catch (InvalidOperationException)
        {
            // 进程已经退出,无法继续退出。既然已经退了,那这里也算是退出成功了。
            // 于是这里其实什么代码也不需要执行。
        }
    }
}

结束掉自己

可以是参见林德熙的博客,使用 Environment.FailFast,在结束掉自己的时候记录自己的错误日志。

  • dotnet 使用 Environment.FailFast 结束程序 - 林德熙

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • C#/.NET 移动或重命名一个文件夹(如果存在,则合并而不是出现异常报错)
  • 如何创建应用程序清单文件 App.Manifest,如何创建不带清单的应用程序
  • 应用程序清单 Manifest 中各种 UAC 权限级别的含义和效果
  • 启用 Windows 审核模式(Audit Mode),以 Administrator 账户来设置电脑的开箱体验
  • Windows 中的 UAC 用户账户控制
  • Windows 下使用 runas 命令以指定的权限启动一个进程(非管理员、管理员)
  • Windows 的 UAC 设置中的通知等级实际上只有两个档而已
  • Windows 系统上使用任务管理器查看进程的各项属性(命令行、DPI、管理员权限等)
  • C#/.NET 如何获取一个异常(Exception)的关键特征,用来判断两个异常是否表示同一个异常
  • C#/.NET 如何在第一次机会异常 FirstChanceException 中获取比较完整的异常堆栈
  • C#/.NET 使用 git 命令行来操作 git 仓库
  • C#/.NET 中启动进程时所使用的 UseShellExecute 设置为 true 和 false 分别代表什么意思?
  • WPF 的命令的自动刷新时机——当你 CanExecute 会返回 true 但命令依旧不可用时可能是这些原因
  • 将 C++/WinRT 中的线程切换体验带到 C# 中来(WPF 版本)
  • 如何在 MSBuild 的项目文件 csproj 中获取绝对路径
  • 网络传输文件的问题
  • JavaScript-如何实现克隆(clone)函数
  • .pyc 想到的一些问题
  • [译]Python中的类属性与实例属性的区别
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CSS盒模型深入
  • Github访问慢解决办法
  • Invalidate和postInvalidate的区别
  • jdbc就是这么简单
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • MySQL-事务管理(基础)
  • Object.assign方法不能实现深复制
  • 从伪并行的 Python 多线程说起
  • 面试总结JavaScript篇
  • 那些年我们用过的显示性能指标
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (day6) 319. 灯泡开关
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (第27天)Oracle 数据泵转换分区表
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (理论篇)httpmoudle和httphandler一览
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (原創) 物件導向與老子思想 (OO)
  • (转)重识new
  • .bat批处理(六):替换字符串中匹配的子串
  • .mysql secret在哪_MYSQL基本操作(上)
  • .NET6 命令行启动及发布单个Exe文件
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET的微型Web框架 Nancy
  • .net快速开发框架源码分享
  • .NET设计模式(8):适配器模式(Adapter Pattern)