2009-09-03 102 views
0

在C#中我使用process.Kill()杀死进程, 同时在杀死应用程序时如何检测到这个事件?如何检测杀死进程事件

顺便说一句:Application.ApplicationExit事件还没有被解雇!

+0

也许这不符合你的问题的精神,但需要注意的是,总是有一种机制可供用户强制杀死你的进程而不让你的进程“处理”或“检测”事件。你想在你的“检测”代码中做什么? – reuben 2009-09-03 09:18:31

+0

@Reuben 如果窗口关闭或应用程序退出,我将保存一些数据,这对于我的应用程序是必需的。 – guaike 2009-09-03 13:03:59

+4

我的观点是......你不能*依靠*来获得保存数据的机会,特别是在你的程序意外终止的情况下。你当然可以尽量做到这一点,但你必须意识到,总会有一些事件可能导致你的应用程序退出,而没有给你一个保存数据的机会。 (例如,系统的电源线可能被拔掉。)我不是故意挑剔,我只是想为其他人提出类似的问题。 – reuben 2009-09-04 04:27:55

回答

1

,如果它是一个WinForm,可以捕捉事件FormClosing并检查CloseReason

None 
WindowsShutDown 
MdiFormClosing 
UserClosing 
TaskManagerClosing 
FormOwnerClosing 
ApplicationExitCall 
+1

但是如果使用process.Kill()方法,FormClosing事件还没有被解雇 – guaike 2009-09-03 09:08:43

+2

@guaike,这就是操作系统的方式,当它被强行杀死时它不能给你一个理由。 – 2009-09-03 12:20:49

1

实现这一点有没有简单的方法,虽然代码注入,API钩子,和一些其他的技术可以被用来完成这个目标,但是我的问题是,你是否真的想经历很多额外的工作来确保你的应用程序意识到意外终止?您必须确保您编码注入/挂钩(或任何您选择的方法)每个人可用于终止您的应用程序的任何可能的方法,当某人确实做出其中一个调用时,您的应用程序可以触发它自己的事件,指示它应该处理这样的事件并准备退出。基本上,你也可以使用它来阻止任何人也能够关闭你的应用程序。

如果你想了解更多关于这些技术的信息,请告诉我,我会发布一些链接。祝你好运!

+0

嗨,我对这个话题感兴趣。你能提供一些链接,我可以阅读更多关于这方面的信息吗?提前致谢。 – kamilw 2011-05-12 06:45:35