2013-02-13 56 views
6

मैं किसी दिए गए प्रक्रिया के लिए लोड किए गए सभी डीएलएस की एक सूची प्राप्त करना चाहता हूं। मैं वर्तमान में .NET Framework 4.0 का उपयोग कर रहा हूं। मुझे पता है कि प्रक्रिया के माध्यम से सभी प्रबंधित डीएलएस तक पहुंचने का प्रयास करते समय bug है। मॉड्यूल गुण। (केवल अप्रबंधित डीएलएस सूचीबद्ध करता है)। मुझे इन सभी डीएलएस को प्रोग्रामेटिक रूप से पुनर्प्राप्त करने का एक तरीका चाहिए।एक प्रक्रिया के लिए सभी डीएलएलएस प्राप्त करें

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

संपादित करें: जिस प्रक्रिया में मुझे रूचि है वह वर्तमान ऐपडोमेन में नहीं है।

+2

जांचें: 'AppDomain.GetAssemblies' –

+0

@AppDeveloper मुझे लगता है कि वह किसी अन्य प्रक्रिया की असेंबली प्राप्त करना चाहता है, न कि ऐपडोमेन – Jehof

+0

का उपयोग करके स्वयं की प्रक्रिया जवाब के लिए धन्यवाद। यदि मेरी प्रक्रिया वर्तमान ऐपडोमेन में नहीं चल रही है, तो मुझे विश्वास नहीं है कि यह काम करेगा। – Matthew

उत्तर

6

मुझे पता है एक बग

नहीं है कि कर रहा हूँ, कि एक बग नहीं है। यह सीएलआर वी 4 में एक जानबूझकर डिजाइन परिवर्तन था, माइक्रोसॉफ्ट ने इसे गुप्त नहीं रखा था। सीएलआर के पिछले संस्करणों ने भारित असेंबली अनुकरण करने का प्रयास किया, हालांकि वे अप्रबंधित डीएलएल थे। लेकिन जब उन्होंने साइड-बाय-साइड इन-प्रोसेस सीएलआर वर्जनिंग फीचर को कार्यान्वित किया, तो यह समझ में बंद हो गया। यह चला गया है और वापस नहीं आ जाएगा।

यह वास्तव में एक बड़ी समस्या नहीं है, किसी अन्य प्रक्रिया में लोड असेंबली की सूची प्राप्त करना डीबगिंग इंटरफ़ेस द्वारा समर्थित है। ICorDebugAppDomain :: EnumerateAssemblies() टिकट है। खैर, प्रक्रिया के रूप में उपयोग करने के लिए बिल्कुल आसान नहीं है। मॉड्यूल। इसका उपयोग कैसे करें इसका पता लगाने के लिए MDbg sample का उपयोग करें।

+0

सुधार के लिए धन्यवाद। क्या आप कृपया एमडीबीजी के बारे में मेरे अन्य प्रश्न को देख सकते हैं? [कड़ी] (http://stackoverflow.com/questions/14877213/mdbg-debuggers-protocol-is-incompatible-with-the-debuggee)। – Matthew