2009-02-02 5 views
29

मैं किसी अन्य प्रक्रिया के कमांड लाइन तर्क कैसे प्राप्त कर सकता हूं?सी # में किसी अन्य प्रक्रिया के कमांड लाइन तर्क कैसे पढ़ा जाए?

System.Diagnostics.Process वर्ग के स्थिर कार्यों का उपयोग करते हुए मैं चल रही प्रक्रियाओं की एक सूची प्राप्त कर सकते हैं, उदाहरण के लिए नाम से:

Process[] processList = Process.GetProcessesByName(processName); 

हालांकि, इस प्रक्रिया को शुरू करने के लिए उपयोग की जाने वाली कमांड लाइन तक पहुंचने का कोई तरीका नहीं है। कोई ऐसा कैसे करेगा?

+0

आप अपने लिए ऐसा करने की कोशिश कर क्या व्याख्या कर सकते हैं? यह एक बेहतर समाधान पाने में मदद कर सकता है। –

+0

मैं अपने मामले msiexec में, एप्लिकेशन के सही उदाहरण को खोजने के लिए कमांड लाइन तर्क पुनर्प्राप्त करना चाहता हूं। रेमंड चेन द्वारा –

+1

दिलचस्प लेख: http://blogs.msdn.com/oldnewthing/archive/2009/11/25/9928372.aspx –

उत्तर

54

यदि आपने प्रक्रिया शुरू करने के लिए स्टार्ट विधि का उपयोग नहीं किया है, तो StartInfo प्रॉपर्टी प्रक्रिया शुरू करने के लिए उपयोग किए गए पैरामीटर को प्रतिबिंबित नहीं करती है। उदाहरण के लिए, यदि आप कंप्यूटर पर चल रही प्रक्रियाओं की एक सरणी प्राप्त करने के लिए GetProcesses का उपयोग करते हैं, तो प्रत्येक प्रक्रिया की StartInfo प्रॉपर्टी में मूल फ़ाइल नाम या तर्क शुरू करने के लिए उपयोग किए गए तर्क शामिल नहीं हैं। (स्रोत: MSDN)

स्टुअर्ट के WMI सुझाव एक अच्छा एक है:

string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery); 
ManagementObjectCollection retObjectCollection = searcher.Get(); 
foreach (ManagementObject retObject in retObjectCollection) 
    Console.WriteLine("[{0}]", retObject["CommandLine"]); 
+0

धन्यवाद है, मैं अपने उपयोग कर रहा हूँ नमूना कोड अब –

+0

पीएस: और एसओ में आपका स्वागत है :) –

+1

धन्यवाद। मैंने अभी महसूस किया है (बहुत देर हो चुकी है) कि स्टैक ओवरफ्लो नशे की लत है। – xcud

1

Process.StartInfoProcessStartInfo ऑब्जेक्ट देता है जो कि कथित तौर पर तर्कसंगत संपत्ति में तर्क नहीं है।

+1

यह न मेरे मामले में :(हो सकता है कि अगर यह केवल काम करता है अन्य प्रक्रिया –

+5

वास्तव में CLR में होस्ट की है।, तर्क संपत्ति केवल तभी प्रक्रिया प्रबंधित प्रक्रिया एक ProcessStartInfo वस्तु का उपयोग करने से शुरू किया गया था निर्धारित है। –

5

यदि आप विंडोज एक्सपी या बाद में लक्षित कर रहे हैं और आप डब्लूएमआई के ओवरहेड को बर्दाश्त कर सकते हैं, तो डब्लूएमआई के WIN32_Process class का उपयोग करके लक्ष्य प्रक्रिया को देखना होगा, जिसमें कमांडलाइन संपत्ति है।

0

क्या दोनों परियोजनाएं आपकी हैं? क्या आप उस प्रक्रिया के स्रोत को संशोधित कर सकते हैं, जिसे आप जांचने की कोशिश कर रहे हैं ताकि वह आपको उस प्रक्रिया के बाहर कहीं से पढ़ने की कोशिश करने के बजाए इसके कमांड लाइन तर्क दे सके?

+0

नहीं, अन्य प्रक्रिया आप और स्टुअर्ट करने के लिए माइक्रोसॉफ्ट के msiexec –

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