Pergunta

Eu estou tentando encontrar a alça do main fio de um aplicativo externo. O programa que eu estou tentando encontrar o thread principal é multithreaded e é importante eu sempre encontrar o fio principal. Eu sei que, no máximo, haverá uma cópia deste programa em execução. Isto é como eu estou fazendo isso no momento:

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

Na maioria das vezes, Tópicos [0] é o segmento principal, mas outras vezes não é. Como posso ter certeza de que o fio que eu acho é o fio condutor do outro aplicativo?

Obrigado.

Foi útil?

Solução

Este é um palpite, mas via Processes, você pode obter um ProcessThreadCollection através da propriedade Threads. Cada segmento tem um StartTime (disponível como Ticks também), assumindo assim o segmento principal é o primeiro a começar, você poderia escolher aquele com o menor tempo de início.

Caso contrário, se você pode obter a pilha de chamadas para cada thread, você pode olhar para o ponto de entrada do aplicativo. Eu não poderia encontrar uma chamada gerenciado para isso, mas eu tenho certeza que você pode obtê-lo através de P / Invoke.

Outras dicas

Discussão sobre a vinda para a festa de fim -, mas se alguém encontrar isso em uma pesquisa no Google ou algo assim, o que eu faço para o meu ID thread principal é conjunto Thread.CurrentThread.Name para um valor (como "Main") quando meu aplicativo é iniciado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top