有没有办法拦截Windows(.NET)中的进程“Kill”命令?

时间:2012-03-06 18:18:59

标签: .net windows

我有一个用.NET 4.0(c#)编写的Windows控制台应用程序,如果应用程序/进程被异常终止(例如从任务管理器或操作系统关闭),有没有办法拦截这个,以便可以执行一些清理代码吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

您无法检测到您自己的进程被杀死了。当有人用您的进程调用NtTerminateProcess()并且他们有权这样做时,您不会被告知。你的线程都停止了,你的过程从你的下方消失了。

值得庆幸的是,大多数清理工作都不需要手动完成 - 操作系统将回收所有未自由的内存,所有未关闭的系统句柄都将自动清理并且全部清除

将自动删除您作为TEMPORARY打开的临时文件(您这样做吗?)

原因很简单。如果你决定通过任务管理器杀死一个程序 - 那是因为用户已经认定它是行为不端的。如果你告诉它不要行为不端,那么它可能会忽略你,因为它是行为不端。

似乎您进行流程管理的更好方法是为您提供退出流程的合法方式 - 无论是通过处理WM_CLOSE事件的窗口还是在控制台中运行它都可以通过角落里的红色X按钮中止。任务经理应该是最后的手段。如果用户在按Ctrl + Alt + Del的过程中遇到麻烦,那么你就不会有第二次机会。

答案 1 :(得分:2)

看一下Win32.SystemEvents,有很好的例子来说明如何检测这些事件。

答案 2 :(得分:0)

通常没有任何方法可以处理被杀死的进程,但是您应该能够处理应用程序退出时发生的事件。 (试想一下:如果你能处理一个被杀的进程,写一些可怕的间谍软件类型的东西真的很容易)。如果我没记错的话,有办法检查应用程序关闭的原因。根据导致其关闭的原因,您可以采取不同的反应。

相关问题