NET - Trova applicazioni esterne ID thread principale
-
22-08-2019 - |
Domanda
Sto cercando di trovare la maniglia della principale filo di un'applicazione esterna. Il programma che sto cercando di trovare il filo conduttore delle è multithreading ed è importante trovo sempre il filo conduttore. So che al massimo ci sarà una copia di questo programma in esecuzione. Questo è come io sto facendo in questo momento:
Process[] someProcesses = Process.GetProcessesByName("some");
IntPtr threadHandle = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)someProcesses[0].Threads[0].Id);
La maggior parte del tempo, le discussioni [0] è il filo conduttore, ma altre volte non lo è. Come posso fare in modo che il filo che ho trovato è il filo conduttore della altra applicazione?
Grazie.
Soluzione
Questa è una supposizione, ma tramite Processes
, è possibile ottenere un ProcessThreadCollection
tramite la proprietà Threads
. Ogni thread ha un StartTime
(disponibile come Ticks
pure), quindi assumendo il thread principale è il primo ad iniziare, si poteva scegliere quello con l'ora di inizio più basso.
In caso contrario, se è possibile ottenere lo stack di chiamate per ogni thread, si potrebbe cercare il punto di ingresso dell'applicazione. Non riuscivo a trovare una chiamata gestita per questo, ma sono sicuro che si può ottenere attraverso il P / Invoke.
Altri suggerimenti
Parlare di venire alla festa in ritardo - ma se qualcuno trova questo in una ricerca su Google o qualcosa del genere, quello che faccio per il mio ID thread principale è impostato Thread.CurrentThread.Name
ad un valore (come "principale"), quando la mia applicazione si avvia.