.NET - Finden Sie externe Anwendungen Haupt-Thread-ID
-
22-08-2019 - |
Frage
Ich versuche, den Griff der Haupt Gewinde einer externen Anwendung zu finden. Das Programm Ich versuche, den Haupt-Thread zu finden, ist multithreaded und es ist wichtig, ich immer den roten Faden finden. Ich weiß, dass höchstens dort eine Kopie dieses Programm ausgeführt wird. Dies ist, wie ich es im Moment tue:
Process[] someProcesses = Process.GetProcessesByName("some");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);
die meiste Zeit, Threads [0] ist der Haupt-Thread aber auch andere Zeiten ist es nicht. Wie kann ich sicherstellen, dass der Thread, ich finde, der Haupt-Thread von der anderen Anwendung ist?
Danke.
Lösung
Dies ist eine wilde Vermutung, aber über Processes
können Sie eine ProcessThreadCollection
über die Threads
Eigenschaft erhalten. Jeder Thread hat eine StartTime
(erhältlich als Ticks
auch), so dass der Haupt-Thread unter der Annahme ist die erste zu starten, können Sie das mit der niedrigsten Startzeit auswählen.
Andernfalls, wenn Sie den Call-Stack für jeden Thread bekommen können, können Sie für die Anwendung Einstiegspunkt suchen. Ich konnte nicht ein verwaltetes Anruf für das finden, aber ich bin sicher, dass Sie es durch P / Invoke bekommen kann.
Andere Tipps
Sprechen Sie über die spät zur Party kommt - aber wenn jemand dies in einer Google-Suche oder etwas findet, was ich zu tun ID mein Haupt-Thread wird Thread.CurrentThread.Name
auf einen Wert (wie „Main“), wenn mein app startet.