2013-02-13 3 views
6

Vorrei ottenere un elenco di tutte le DLL caricate per un determinato processo. Attualmente sto utilizzando .NET Framework 4.0. Sono consapevole del fatto che esiste un bug durante il tentativo di accedere a tutte le DLL gestite tramite la proprietà Process.Modules. (Elenca solo le dll non gestite). Ho bisogno di un modo per recuperare a livello di programmazione tutte queste DLL.Ottieni tutte le DLL per un processo

Process[] myProcess = Process.GetProcessesByName("MyProcess"); 
if(myProcess.Count() > 0) 
{ 
     foreach (ProcessModule processModule in myProcess[0].Modules) 
     //get information 
} 

MODIFICA: il processo a cui sono interessato non è nell'AppDomain corrente.

+2

check out: 'AppDomain.GetAssemblies' –

+0

@AppDeveloper penso che voglia ottenere gli assembly di un altro processo e non il proprio processo utilizzando AppDomain – Jehof

+0

Grazie per la risposta. Tuttavia, se il mio processo non è in esecuzione nell'AppDomain corrente, non credo che funzionerà. – Matthew

risposta

6

mi rendo conto che c'è un bug

No, questo non è un bug. È stato un cambiamento di progettazione intenzionale in CLR v4, Microsoft non ha mantenuto questo segreto. Le versioni precedenti del CLR si sforzavano di emulare gli assembly caricati come se fossero DLL non gestite. Ma questo ha appena smesso di dare un senso quando hanno implementato la funzionalità di controllo delle versioni CLR in-side side-by-side. È andato e non tornerà.

Questo non è esattamente un grosso problema, ottenere l'elenco degli assembly caricati in un altro processo è ben supportato dall'interfaccia di debug. ICorDebugAppDomain :: EnumerateAssemblies() è il ticket. Beh, non esattamente facile da usare come Process.Modules. Utilizzare MDbg sample per scoprire come usarlo.

+0

Grazie per la correzione. Potete per favore guardare la mia altra domanda riguardante MDbg? [Link] (http://stackoverflow.com/questions/14877213/mdbg-debuggers-protocol-is-incompatible-with-the-debuggee). – Matthew