2014-03-24 80 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)进行处理。 –