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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top