2013-02-13 16 views
6

Belirli bir işlem için yüklenen tüm dll'lerin bir listesini almak istiyorum. Şu anda .NET Framework 4.0 kullanıyorum. Tüm yönetilen dll'lere Process.Modules özelliği üzerinden erişmeye çalışırken bug olduğunu biliyorum. (Sadece yönetilmeyen dll'leri listeler). Tüm bu programları programlı olarak almanın bir yoluna ihtiyacım var.Bir işlem için tüm DLL'leri alın

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

DÜZENLEME: İlgilendiğim işlem geçerli AppDomain'de değil.

+2

check out: 'AppDomain.GetAssemblies' –

+0

@AppDeveloper Ben başka bir sürecin meclisleri almak istiyor düşünüyorum ve AppDomain kullanarak kendi işlem değil – Jehof

+0

Cevabınız için teşekkür ederiz. İşlemim geçerli AppDomain'de çalışmıyorsa, bunun işe yarayacağına inanmıyorum. – Matthew

cevap

6

Ben bir hata

yok olduğunu farkındayım, bu bir hata değil. CLR v4'te kasıtlı bir tasarım değişikliğiydi, Microsoft bunu bir sır olarak saklamıyordu. CLR'nin önceki sürümlerinde, yüklenen derlemeleri, yönetilmeyen DLL dosyalarıymış gibi taklit etmek için çaba sarf edildi. Ancak bu, yan yana işlem içi CLR sürümlendirme özelliğini uyguladıklarında mantıklı bir şekilde durdu. Gitti ve geri gelmeyecek.

Bu tam olarak önemli bir sorun değildir, başka bir işlemde yüklü derlemeler listesini almak hata ayıklama arabirimi tarafından da desteklenir. ICorDebugAppDomain :: EnumerateAssemblies() bir bilettir. Eh, Process.Modules olarak kullanmak kadar kolay değil. Nasıl kullanılacağını öğrenmek için MDbg sample'u kullanın.

+0

Düzeltme için teşekkür ederiz. MDbg ile ilgili diğer soruma bakar mısınız lütfen? [Bağlantı] (http://stackoverflow.com/questions/14877213/mdbg-debuggers-protocol-is-incompatible-with-the-debuggee). – Matthew

İlgili konular