2011-08-14 18 views
5

निष्पादित करने वाली प्रक्रिया आईडी/नाम को पकड़ना, मैं मूल प्रक्रिया के अंदर सीएलआर रनटाइम शुरू करने के लिए कुछ कोड का उपयोग कर रहा हूं, फिर मेरे .NET DLL को दूसरे लोड करने के लिए कॉल करें। उस प्रक्रिया के अंदर नेट निष्पादन योग्य।मेरी प्रबंधित असेंबली/होस्ट सीएलआर रनटाइम (सीएलआर रनटाइम होस्ट स्थान)

तो जैसे अन्य .NET निष्पादन मैं प्रतिबिंब का उपयोग कर रहा हूँ, लोड करने के लिए:

Assembly.Load(file).EntryPoint.Invoke(null, null); 

अब, मैं एक सी ++ dll कि क्रम शुरू होता है इंजेक्षन, यह तो नेट dll जो विधानसभा का उपयोग करता है कहते हैं। स्मृति में निष्पादन योग्य एक और .NET लोड करने के लिए लोड करें और इसे निष्पादित करें।

एक बार dll मेरी नेट निष्पादन लोड करता है, बुला:

System.Reflection.Assembly.GetExecutingAssembly().Location; 

या यहाँ तक कि

Process.GetCurrentProcess().MainModule.FileName; 

यह, ज़ाहिर है, निष्पादन योग्य ही के स्थान देता है यहां तक ​​कि एक के अंदर अपनी चल रहा है, हालांकि मेजबान प्रक्रिया। क्या कोई तरीका है कि मैं उस मेजबान प्रक्रिया का नाम पकड़ सकता हूं? प्रक्रिया एक्सप्लोरर इसे होस्ट प्रक्रिया के अंदर चलने के रूप में दिखाता है, इसलिए मुझे पता है कि मेरे पास यह हिस्सा सही तरीके से काम कर रहा है।

बेशक अगर मैं इन आदेशों को .NET DLL के अंदर चलाने के लिए चला गया था जो पहले लोड किया गया था तो यह उचित प्रक्रिया नाम दिखाएगा।

धन्यवाद।

संपादित करें:

मैं GetEntryAssembly() और GetCallingAssembly() की कोशिश की है और साथ ही।

उत्तर

4

ऐसा मत करो।

आप किसी भी प्रक्रिया में .NET ढांचे को इंजेक्ट नहीं कर सकते हैं जो आपकी नहीं है। इसमें पहले से लोड किया गया एक अलग ढांचा हो सकता है या बाद में एक अलग फ्रेमवर्क संस्करण लोड करने की इच्छा हो सकती है।

आप GetModuleFileName (GetModuleHandle (NULL) को कॉल करके होस्ट प्रक्रिया का नाम प्राप्त कर सकते हैं; (दोनों एपीआई कॉल पी/Invoke हैं। [1] और [2])।

+0

क्षमा करें प्रति लुंडबर्ग, लेकिन मैं आपको संपादन को श्रेय नहीं दे सकता क्योंकि स्टैक ओवरव्लो उनकी पहुंच क्षमता कीड़े को ठीक नहीं करेगा। – Joshua

0

यदि मैं आपके प्रश्न को सही ढंग से समझता हूं तो आप "मूल प्रक्रिया" ढूंढना चाहते हैं ... ऐसा करने के तरीके हैं, या तो प्रबंधित या पी/Invoke के माध्यम से ... अच्छा कोड नमूने के लिए यह कैसे करें How to get parent process in .NET in managed way

संबंधित मुद्दे