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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top