一个非常简单的情况。我正在研究Delphi 2007中的一个应用程序,它经常被编译为'Release',但仍然在调试器下运行。有时它也会在SilkTest下运行,用于回归测试。虽然这很有趣但我想做一些特别的事情......
我想检测我的应用程序是否在调试器/回归测试器中运行,如果是这种情况,我希望应用程序知道使用了哪个工具! (因此,当应用程序崩溃时,我可以在其错误报告中报告此信息。)
任何建议,解决方案?
答案 0 :(得分:11)
您可以检查启动应用程序的父进程。
使用CreateToolhelp32Snapshot
/ Process32First
/ Process32Next
获取应用PID的父PID(PROCESSENTRY32.th32ParentProcessID
或TProcessEntry32.th32ParentProcessID
)。然后获取父PID的文件名以与要检查的应用程序进行比较,如SilkTest。
检查this article代码使用情况。
除了IsDebuggerPresent
和CheckRemoteDebuggerPresent
之外,您还可以查询PEB.BeingDebugged
(PEB是流程环境块,要获得PEB,您必须查询TEB,即线程环境块)。
答案 1 :(得分:3)
您可能正在寻找IsDebuggerPresent
功能。
答案 2 :(得分:1)
要检测SilkTest,您可以尝试附加到仅由SilkTest使用的DLL,以便检测其存在。例如,如果Open Agent附加到流程,则会出现Win32HookDll_x86.dll
或Win32HookDll_amd64.dll
(可以使用Process Explorer等工具轻松找到这些名称。
答案 3 :(得分:0)
您也可以
if DebugHook <> 0 then ...