2014-03-24 112 views
4

我編寫了一個代碼,能夠使用映射文件生成自己的覆蓋數據,而不需要另一個應用程序調試它,並且還能夠生成與Cobertura報告和OpenCover兼容的xml報告以進一步分析和圖形報告。進程終止回調

事情是,到目前爲止,我不得不調用函數來手動生成報告,並且想法是一旦進程退出就自動生成它。

我的第一種方法是在RtlExitUserProcess/RtlExitUserThread/ExitProcess嘗試編寫鉤子,但每個函數都會覆蓋一些特定的情況,如果強制終止進程(例如使用taskkill終止它)或使用CTRL關閉應用程序控制臺窗口+ C的行爲改變。

有沒有什麼辦法可以創建一個可靠的回調函數,當應用程序即將結束時總是會被調用?就像當您調試另一個應用程序時以及進程中止時一樣,您將收到一個包含詳細信息的調試事件。

在此先感謝

+1

我的理解是,你不能掛鉤「殺死進程」/「任務殺死」,似乎在這裏備份http://stackoverflow.com/questions/838261/handling-end-process-of- a-windows-app – Graymatter

回答

5

不,你不能掛鉤自己進程的終止。如果可以的話,那麼一個惡意的(或者只是有問題的)程序可能會掛鉤它,然後拒絕通過終止。調試器是不同的,因爲調試器是一個單獨的程序。

如果我正在編寫程序,我只是把我的報告代碼放在相關單元的finalization部分。德爾福RTL將在程序關閉時調用它,通常以單元初始化的相反順序進行調用,這通常也是使用單元的順序。在程序的早期使用你的分析單元,它將在終止序列的後期完成,使你可以捕獲儘可能多的數據。

+0

+1。此外,Ctrl + C可以通過[SetConsoleCtrlHandler](http://msdn.microsoft.com/en-us/library/windows/desktop/ms686016%28v=vs.85%29.aspx)進行處理。 –