一个非常简单的情况。我正在使用Delphi 2007中的应用程序,该应用程序通常被编译为“发行版”,但仍在调试器下运行。有时它也将在SilkTest下运行,以进行回归测试。虽然这很有趣,但我想做一些特别的事情...
我想检测我的应用程序是否在调试器/回归测试器中运行,如果是这种情况,我希望应用程序知道使用了哪种工具! (因此,当应用程序崩溃时,我可以在错误报告中报告此信息。)
有什么建议,解决方案吗?
最佳答案
您可以检查启动您的应用程序的父进程。
使用CreateToolhelp32Snapshot
/Process32First
/Process32Next
获取您的应用程序PID的父PID(PROCESSENTRY32.th32ParentProcessID
或TProcessEntry32.th32ParentProcessID
)。然后获取父PID的文件名,以与要检查的应用程序进行比较,例如SilkTest。
检查this article的代码使用情况。
除了IsDebuggerPresent
和CheckRemoteDebuggerPresent
之外,您还可以查询PEB.BeingDebugged
(PEB是进程环境块,要获取PEB,您必须查询TEB,即线程环境块)。