2009-09-03 143 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