Pregunta

Estoy tratando de encontrar la manija de la principal hilo de una aplicación externa. El programa que estoy tratando de encontrar el hilo conductor de es multiproceso y es importante siempre encuentro el hilo principal. Yo sé que a lo sumo habrá una copia de este programa en ejecución. Así es como lo estoy haciendo en este momento:

Process[] someProcesses = Process.GetProcessesByName("some");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);

La mayoría de las veces, Hilos [0] es el hilo principal, pero otras veces no lo es. ¿Cómo puedo estar seguro de que el hilo que encuentro es el hilo conductor de la otra aplicación?

Gracias.

¿Fue útil?

Solución

Esta es una suposición, pero a través de Processes, se puede obtener una ProcessThreadCollection través de la propiedad Threads. Cada hilo tiene una StartTime (disponible como Ticks también), por lo que suponiendo que el hilo principal es el primero en comenzar, usted podría escoger el que tiene el tiempo de inicio más baja.

De lo contrario, si usted puede conseguir la pila de llamadas para cada hilo, podría buscar el punto de entrada de la aplicación. No pude encontrar una llamada gestionada por eso, pero estoy seguro de que puede conseguirlo a través de P / Invoke.

Otros consejos

Hablar de venir a la fiesta tarde - pero si alguien encuentra esto en una búsqueda en Google o algo, lo hago a mi ID hilo principal se establece Thread.CurrentThread.Name a un valor (como "principal") cuando mi aplicación se pone en marcha.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top