Eine sehr einfache Situation. Ich arbeite an einer Anwendung in Delphi 2007, die oft als "Release" kompiliert wird, aber immer noch unter einem Debugger läuft. Gelegentlich wird es auch unter SilkTest für Regressionstests ausgeführt. Während das ziemlich lustig ist, möchte ich etwas Besonderes machen ...
Ich möchte herausfinden, ob meine Anwendung in einem Debugger / Regressionstester läuft, und wenn das der Fall ist, möchte ich, dass die Anwendung weiß, welches Tool verwendet wird! (Wenn also die Anwendung abstürzt, könnte ich diese Informationen im Fehlerbericht melden.)
Irgendwelche Vorschläge, Lösungen?
Sie können den übergeordneten Prozess überprüfen, der Ihre Anwendung gestartet hat.
Mit CreateToolhelp32Snapshot
/ Process32First
/ Process32Next
erhalten Sie die übergeordnete PID ( PROCESSENTRY32.th32ParentProcessID
oder TProcessEntry32.th32ParentProcessID
) für Ihre Anwendungs-PID. Rufen Sie dann den Dateinamen für die übergeordnete PID ab, um sie mit den Anwendungen zu vergleichen, nach denen Sie suchen möchten, z. B. SilkTest.
Überprüfen Sie diesen Artikel für die Code-Verwendung.
Zusätzlich zu IsDebuggerPresent
und CheckRemoteDebuggerPresent
können Sie auch PEB.BeingDebugged
abfragen (PEB ist Process Environment Block, um PEB zu erhalten, müssen Sie TEB abfragen, was der Thread Environment Block ist).
Sie suchen wahrscheinlich nach der Funktion IsDebuggerPresent
.
Um SilkTest zu erkennen, könnten Sie versuchen, eine DLL anzuhängen, die nur von SilkTest verwendet wird, um deren Vorhandensein zu erkennen. Wenn der Open Agent beispielsweise einem Prozess zugeordnet ist, ist Win32HookDll_x86.dll
oder Win32HookDll_amd64.dll
vorhanden (die Namen können leicht mit einem Tool wie Prozess-Explorer .
Tags und Links testing delphi debugging delphi-2007