Question

Une situation très simple. Je travaille sur une application dans Delphi 2007 qui est souvent compilée en tant que "Version" mais qui fonctionne toujours sous un débogueur. Et occasionnellement, il utilisera également SilkTest pour les tests de régression. Bien que ce soit assez amusant, je veux faire quelque chose de spécial ...

Je veux détecter si mon application est exécutée dans un débogueur / testeur de régression et si c'est le cas, je veux que l'application sache quel outil est utilisé! (Ainsi, lorsque l'application se bloque, je peux signaler ces informations dans son rapport d'erreur.)

Des suggestions, des solutions?

Était-ce utile?

La solution

Vous pouvez vérifier le processus parent qui a démarré votre application. Avec CreateToolhelp32Snapshot / Process32First / Process32Next , récupérez le PID parent ( PROCESSENTRY32.th32ParentProcessID ou TProcessEntry32.th32ParentProcessID ) pour votre PID d'application. Ensuite, récupérez le nom de fichier du PID parent à comparer avec les applications à vérifier, telles que SilkTest.

Vérifiez cet article pour utiliser du code.

Outre IsDebuggerPresent et CheckRemoteDebuggerPresent , vous pouvez également interroger PEB.BeingDebugged (PEB est Process Environment Block, pour obtenir le PEB nécessaire. requête TEB, qui correspond au bloc d'environnement de thread).

Autres conseils

Vous recherchez probablement le Fonction IsDebuggerPresent .

Pour détecter SilkTest, vous pouvez essayer de s’attacher à une DLL utilisée uniquement par SilkTest afin de détecter sa présence. Par exemple, si Open Agent est associé à un processus, Win32HookDll_x86.dll ou Win32HookDll_amd64.dll sera présent (les noms peuvent être facilement trouvés avec un outil comme < a href = "http://technet.microsoft.com/en-us/sysinternals/bb896653" rel = "nofollow" title = "Explorateur de processus"> Explorateur de processus .

Vous pouvez également faire

if DebugHook <> 0 then ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top