作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个用 .NET 4.0 (c#) 编写的 Windows 控制台应用程序,如果应用程序/进程异常终止(例如,从任务管理器中终止,或通过操作系统关闭),是否有任何方法可以拦截它,以便可以执行一些清理代码吗?
感谢您的帮助。
最佳答案
您无法检测到您自己的进程正在被终止。当有人使用您的进程调用 NtTerminateProcess() 并且他们有权这样做时,您不会被告知。你的线程全部停止,你的进程从你下面消失。
谢天谢地,大多数清理不需要手动完成——所有你没有释放的内存都将被操作系统回收,所有那些你没有关闭的系统句柄将被自动清理,所有您以 TEMPORARY 打开的临时文件中的一部分(您这样做对吗?)将被自动删除。
原因很简单。如果您决定通过任务管理器终止程序 - 那是因为用户认为它行为不当。如果您随后告诉它停止不当行为,那么它可能会忽略您,因为它正在不当行为。
似乎更好的流程管理方法是为您提供退出流程的合法方式 - 通过处理 WM_CLOSE 事件的窗口或通过在控制台中运行它可以是通过角落的红色 X 按钮中止。任务管理器是万不得已的措施。如果用户不厌其烦地使用 Ctrl+Alt+Del 将您的进程搞死,您就没有第二次机会了。
关于.net - 有没有办法在 Windows (.NET) 中拦截进程 "Kill"命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589554/
我是一名优秀的程序员,十分优秀!