管理 .NET 应用程序在终止/终止时正常关闭

2023-11-23

我们有一个具有许多前台线程的 .NET 控制台应用程序。 如果我们使用任务管理器终止进程或从 Windows 命令行发出killjob、kill,是否有一种方法可以优雅地关闭应用程序(在 .net 控制台应用程序中添加托管代码),例如拥有一个函数被称为 TodoBeforeShutdown() 来处理对象、关闭任何打开的连接等。

附: - 我阅读了其他线程,他们都建议了不同的方法来终止进程,而不是我的具体问题,即在 .NET 托管代码中处理终止进程的最佳方法是什么。

提前致谢。


不幸的是,每当进程被终止时,都不会引发您可以处理的事件。
您可以想象终止一个进程,就像切断计算机电源一样——无论您设计在系统关闭时运行什么代码,如果计算机没有正常或正确关闭,该代码就不会运行。

当您使用任务管理器终止进程时,它会调用 Win32TerminateProcess函数,它无条件地强制进程(包括其拥有的所有线程)退出。的执行all线程/进程被停止,所有挂起的 I/O 请求被取消。你的程序实际上已经死了。The TerminateProcess函数不会调用 CLR 提供的关闭序列,因此您的托管应用程序甚至不知道正在关闭。

您建议您在应用程序进程终止时关心处理对象,但这里有一些值得指出的事情:

  • 始终努力将可能造成的损害降到最低。当您用完物品后,请尽早处理掉它们。不要等到以后。在任何给定时间,当程序的进程终止时,您应该只保留最少数量的对象,这将减少泄漏的可能性。

  • 操作系统一般会清理并释放most终止时这些资源(即句柄等)的使用权。

  • 最后,不用说,以这种方式终止进程确实是一种例外情况——即使某些资源泄漏,这是可以预料的。您不应该以这种方式关闭应用程序,就像您不应该终止必要的 Windows 系统进程一样(即使您可以在以管理员身份运行时这样做)。

如果这是您关闭控制台应用程序的常规计划,你需要寻找另一个计划.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

管理 .NET 应用程序在终止/终止时正常关闭 的相关文章

  • CLSCompliant(true) 拖入未使用的引用

    任何人都可以explain以下行为 总之 如果您创建多个符合 CLS 标准Visual Studio 2008 中的库并让它们共享公共命名空间根 引用另一个库的库将require对该库的引用的引用 即使它不消耗它们 用一句话来解释是相当困难
  • MVC2 中隐藏字段的替代方案

    我有一个 viewModel 其中包含一个在传递给部分视图之前填充的字符串 我需要能够在发布表单时取回数据 目前我已经创建了一个隐藏字段并将数据绑定到它 然后 当回发时 我可以从表单集合中获取数据 这并不完全是我想要的 我希望数据完全隐藏在
  • Api 控制器中长时间运行的任务(使用 Web API,自托管 OWIN)

    我想在自托管 OWIN 环境中的 ApiController 中运行长时间运行的任务 例如 4 5 分钟 但是 我想在开始该任务后 一旦开始长时间运行的任务 就发回响应 而不等待它完成 这个长时间运行的任务与 HTTP 无关 并且顺序运行一
  • 如何在没有 Startup 类的情况下以编程方式启动 .NET 6 最小 API

    我正在尝试对我们的提供商项目实施 PactNet 合同测试 然而问题是 我们使用的是 Minimal API 因此我们没有将 Startup cs 和 Program cs 类全部整合到一个 Program cs 中 这提出了一个问题 因为
  • C# 中 DLL 和命名空间的关系

    这里有一个高级问题 今天我花了很多时间自学基本的高级概念 例如 API 静态和动态库 DLL 以及 C 中的编组 获得所有这些知识让我想到了一个看起来非常基本的问题 并且可能表明我对这些概念的理解存在漏洞 我知道的 DLL 可能包含类 这些
  • C# 数据表来保存表格(无限嵌套)

    我相对较新C 但来自C C 背景 我需要一个类似于的数据类型 类 DataTable 但允许存储的列保存 简单 类型 int float boolean string 以及相同类型的数据 以便一个列可以保存另一个表 该表也具有存储表等的列
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 事件日志写入错误

    很简单 我想向事件日志写入一些内容 protected override void OnStop TODO Add code here to perform any tear down necessary to stop your serv
  • 编译器值类型解析和硬编码“0”整数值

    首先 介绍一些背景知识 阅读问题并接受答案发布在这里 https stackoverflow com questions 8352260 why does the sqlparameter name value constructor tr
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • .Net 中是否有与 HTML 等效的 XmlReader?

    我用过Html敏捷包 http html agility pack net z codeplex过去在 Net 中解析 HTML 但我不喜欢它只使用 DOM 模型 在大型文档和 或具有大量嵌套的文档上 可能会遇到堆栈溢出或内存不足异常 另外
  • 实体框架代码首先保存后不延迟加载

    我的数据库中有一个查找表和一个数据表 我将使用性别和人物作为例子 假设性别表如下所示 Id Code 1 Male 2 Female 人员表如下所示 Id Name GenderId 1 Bob 1 2 Jane 2 我首先在 EF 代码中
  • 删除 TableLayoutPanel 中的特定行

    我有 TableLayoutPanel 我以编程方式添加行 用户基本上选择一个属性 然后与一些控件一起显示在表中 我想我在这里有一个一般性的理解问题 我会尽力解释它 每行中的控件之一是 删除 按钮 该按钮应该删除它所在的行 我所做的是将事件
  • Quartz 与“反应式扩展”

    我正在寻找 C 的调度库 很长一段时间以来 我认为 唯一 的选择是 Quartz NET 它非常强大并且工作得很好 但是当我发现 Reactive Extensions RX http msdn microsoft com en us da
  • 有没有办法在不重新编译的情况下覆盖 .NET Windows 服务名称?

    我有一个 Windows 服务可执行文件 我知道它是用 NET 编写的 我需要将其安装在不同的服务名称下以避免冲突 安装无论如何都不提供指定服务名称 如果我只能访问二进制文件 当我使用 installutil 安装它时是否可以覆盖服务名称
  • 模拟对象 - 将所有方法声明为虚拟方法还是使用接口?

    与 Java 不同 net 中的方法默认不是虚拟的 为了使用大多数模拟对象框架 您要么必须将要在模拟上使用的方法标记为 真实 对象上的虚拟方法 要么必须有一个可以模拟被测试类将使用的接口接受代替执行 将每个方法标记为虚拟似乎是一种不好的形式
  • 什么可以解释托管堆上超过 5,000,000 个 System.WeakReference 实例?

    我一直在针对生产 ASP NET Web 应用程序运行负载测试 并且看到在堆上创建了大量 System WeakReference 在大约 15 分钟内 负载管理堆内存已飙升至大约 3GB 并且我有大约 5 000 000 个对 Syste
  • 在.rdlc报告的底部设置一个文本框

    我在 rdlc 报告中使用 tablix 有一个文本框 其中包含文本 签名 我想将此文本框放置在报告最后一页的底部 就在页脚之前 我已经用谷歌搜索了这个解决方案 但没有找到满意的结果 我的环境是VS2010 framework 4 0 有什
  • 线程睡眠和Windows服务

    我正在开发一个 Windows 服务 该服务存在一些问题Thread Sleep 所以我想我会尝试使用计时器 因为这个问题建议 在 Windows 服务中使用 Thread Sleep https stackoverflow com que
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的

随机推荐

  • iOS 8 YouTube 视频嵌入

    我面临着我似乎无法理解的问题 我的这段代码在 Xcode 5 和 iOS 7 中完美运行 void viewDidLoad super viewDidLoad Do any additional setup after loading th
  • Cookie 过期在 C# 中不起作用

    我尝试使用 C 4 0 和以下代码制作持久 cookie HttpCookie AssoCookie new HttpCookie AssociateCode AssociateCode AssoCookie Expires DateTim
  • GZipStream - 即使使用刷新,写入也不写入所有压缩数据?

    我在针对 Net 3 5 的 gzipstream 方面遇到了一个棘手的问题 这是我第一次使用 gzipstream 但是我根据许多教程进行了建模 包括here我仍然被困住了 我的应用程序将数据表序列化为 xml 并插入到数据库中 将压缩数
  • Python 3 中的 PyClass_New 等效项是什么?

    之前我使用 C API 创建了一些 Python 类 当我要使用 Python 3 构建旧项目时 它会给出以下编译错误 PyClass New was not declared in this scope Py InitModule was
  • 在这种情况下是否有必要调用flush()(JPA接口)?

    因为调用flush 来让每个实体从内存持久化到数据库 因此 如果我使用调用太多不必要的flush 可能会花费很多时间 因此对于性能来说不是一个好的选择 这是一个场景 我不知道什么时候调用flush Order and Item have B
  • 从初始化列表进行就地向量构造(对于带有构造函数参数的类)[重复]

    这个问题在这里已经有答案了 可能的重复 我可以列表初始化仅移动类型的向量吗 编辑1 请考虑重新开放投票 我的问题强调就地建设 移动构造是一种替代方案 但不是这个问题的目的 感谢您的回答 编辑2 由于我无法回答这个问题 它已关闭 我在这里发布
  • 根据任何选定列中的值对 data.table 进行子集化的有效方法[重复]

    这个问题在这里已经有答案了 假设我有一个包含 6 列的 data table library data table set seed 123 dt lt data table id 1 100 p1 sample 1 10 100 repl
  • 使用 Blazor 访问设备摄像头

    我有 Blazor Web Assembly PWA 如何打开设备本机摄像头 我正在尝试编写一个 PWA 来捕获和保存图片 EDIT 想要将捕获的图像以 jpeg 格式保存到 Azure Blob 存储中 您可以通过 HTML 输入来实现此
  • 如何使用 CSS 或 Javascript 创建选取框

    我需要创建两个跨越任意大小的浏览器窗口的选取框 一个带有重复图像 一个带有重复链接 选框项目需要从一开始就显示出来 而不需要几秒钟的时间才能出现在屏幕上 并且每个项目之间的距离大约为 20px 30px 当用户将鼠标悬停在其上时 选取框需要
  • AVAudioRecorder 不会在设备上录制

    这是我的方法 void playOrRecord UIButton sender if playBool YES NSError error nil NSString filePath NSBundle mainBundle pathFor
  • 解决应用内购买缺少促销代码的问题

    Apple 不提供应用内购买的促销代码 让用户免费尝试通过应用内购买解锁的功能或内容 同时遵守 Apple 开发者指南的最佳方式是什么 这个想法是允许一组特殊的用户 评论者 主要粉丝等 无需付费即可访问作为应用内购买提供的内容或功能 解决此
  • 在 Android Activity 中设置全屏亮度

    我正在使用这种方法将屏幕设置为全亮度 SuppressLint NewApi private void setFullBright if Build VERSION SDK INT gt Build VERSION CODES CUPCAK
  • Rails 4:跳过回调

    我的应用程序中有一个拍卖和一个投标对象 当有人按下出价按钮然后它调用投标创建创建出价的控制器 然后对拍卖对象执行一些其他操作 投标控制器 gt 创建 auction endtime auction auctiontimer auction
  • NSMutableArray addObject 不起作用

    我已宣布NSMutableArray categories在我的视图控制器 h 文件中 并为其声明一个属性 In the parser foundCharacters 的方法NSXMLParser在我的 m 文件中 我有以下代码 void
  • 制作简单的 Google Android Maps API v2 项目时 Android Studio 中的编译错误

    最近我迁移到了新Android Studio 集成开发环境基于IntelliJ 我遵循的指南是 https developers google com maps documentation android start 为了 基本 如何在 A
  • Android In App Update 在立即模式下下载 APK 后不安装 APK

    应用程序正在使用立即模式来更新应用程序 它开始下载 APK 但下载 APK 后 它永远不会安装 UI 挂起并显示下载进度 100 立即模式下没有反馈下载已完成 即时模式如何实现app自动下载 安装 重启 我正在使用以下模式以立即模式开始更新
  • C - 可移植地获取类型对齐

    我正在为一种非常简单的语言编写非常小的解释器 它允许简单的结构定义 由其他结构和简单类型组成 如 int char float double 等 我希望字段使用尽可能少的对齐方式 因此使用 max align t 或类似的东西是不可能的 现
  • XHTML 和 &(与号)的编码

    我的网站符合 XHTML Transitional 标准除了一件事 URL 中的 与号 按原样编写 而不是 amp 也就是说 我的页面中的所有 URL 通常都是这样的 a href http www example org page asp
  • 最好使用游标适配器或数组适配器

    我在数据库中存储了大约 100 个时间表 需要根据每周 下周 下个月 逾期时间表等要求基于 Listview 显示它们 是否可以在应用程序启动时加载所有计划并根据用户在阵列适配器中选择的选项 每周 逾期 每月等 显示它们 或者在运行时使用查
  • 管理 .NET 应用程序在终止/终止时正常关闭

    我们有一个具有许多前台线程的 NET 控制台应用程序 如果我们使用任务管理器终止进程或从 Windows 命令行发出killjob kill 是否有一种方法可以优雅地关闭应用程序 在 net 控制台应用程序中添加托管代码 例如拥有一个函数被