.NET - Encontrar aplicações externas principal ID rosca
-
22-08-2019 - |
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.
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.