2010-07-30 8 views
5

मैं कमांड लाइन पढ़कर ज्ञात प्रक्रिया द्वारा उपयोग की जाने वाली फ़ाइलों का पूर्ण पथ निर्धारित करना चाहता हूं। वर्तमान में, प्रक्रिया कमांड लाइन में सापेक्ष पथ के साथ शुरू की गई है जो कॉन्फ़िगरेशन फ़ाइलों जैसी विभिन्न फ़ाइलों को इंगित करती है। समस्या यह है कि यदि पथ निष्पादन योग्य वाले फ़ोल्डर से संबंधित नहीं हैं, तो मेरे पास कमांड लाइन पर दिए गए सापेक्ष पथों को परिवर्तित करने का कोई तरीका नहीं है, ठीक है, मैं 100% सुनिश्चित नहीं हो सकता।सी # किसी अन्य प्रक्रिया की कार्य निर्देशिका प्राप्त करें

उदाहरण दो बैच फ़ाइलों के लिए:

बैच 1 सीडी C: \ test \ बिन test.exe .. \ config \ config.ini

बैच 2 सीडी C: \ test बिन \ test.exe config \ config.ini

बैच फ़ाइल एक के लिए, मुझे प्राप्त कमांड लाइन "c: \ test \ bin \ test.exe .. \ config \ config.ini" है और बैच फ़ाइल के लिए दो I "सी: \ test \ bin \ test.exe config \ config.ini" प्राप्त करें। तो, इसे देखें मैं पथ को हल नहीं कर सकता।

वैसे भी शुरुआत करने वालों के लिए, मुझे ManagementObjectSearcher का उपयोग कर WMI क्वेरी से कमांड लाइन मिली। अब मुझे कमांड लाइन पर पारित पथों को हल करने के लिए प्रक्रिया शुरू करने की प्रक्रिया को शुरू करने की आवश्यकता है, लेकिन कैसे?

संपादित करें: मैं एक महत्वपूर्ण विवरण भूल गया। मैं दूसरी प्रक्रिया की कामकाजी निर्देशिका प्राप्त करना चाहता हूं। असल में, मेरा मुख्य कार्यक्रम किसी अन्य कार्यक्रम से जानकारी एकत्र करता है। मैं प्रक्रिया आईडी निर्धारित करने में सक्षम हूं क्योंकि मुझे निष्पादन योग्य का नाम पता है। मैं कमांड लाइन भी निर्धारित कर सकता हूं। मुझे अब कार्यकारी निर्देशिका या वर्तमान निर्देशिका निष्पादन योग्य प्रारंभ करना चाहिए ताकि मैं कमांड लाइन के सापेक्ष पथ को हल कर सकूं। मुझे उम्मीद है कि मैंने सवाल स्पष्ट कर दिया है।

+1

पुनः प्राप्त किया जा सकता है मुझे लगता है कि प्रश्न का शीर्षक आप काफी क्या पूछ रहे हैं नहीं है। "प्रक्रिया कार्यशील निर्देशिका प्राप्त करें" कार्यशील निर्देशिका का एक प्रश्न है, जो निष्पादन के दौरान संभावित रूप से बदल सकता है, लेकिन सवाल स्वयं निष्पादन योग्य से शुरू होने वाली निर्देशिका के लिए पूछ रहा है, जो काफी अलग हो सकता है (और इसके दौरान नहीं बदलता प्रक्रिया निष्पादन)। @ chris166 का उत्तर आपके प्रश्न के शीर्षक को संबोधित करता है, लेकिन मेरा जवाब सवाल स्वयं को संबोधित करता है, आईएमएचओ। शायद आप भ्रम को स्पष्ट कर सकते हैं? – Cyberherbalist

उत्तर

7

मुझे लगता है कि Environment.CurrentDirectory आपको निर्देशिका को निष्पादन योग्य प्रारंभ करना चाहिए। यह प्रक्रिया की शुरुआत में केवल विश्वसनीय है, क्योंकि यह बाद में बदल सकता है।

या शायद Process.GetCurrentProcess().StartInfo.WorkingDirectory आज़माएं। मैंने इसे स्वयं नहीं देखा, बस इसे MSDN

+0

मैंने यह सब एक कंसोल ऐप में किया, और पर्यावरण। CurrentDirectory ऐप शुरू होने वाली निर्देशिका के साथ आया, जैसा आपने सोचा था। लेकिन Process.GetCurrentProcess()। StartInfo.WorkingDirectory एक खाली स्ट्रिंग के रूप में बाहर आया। जो मुझे आश्चर्यचकित करता था - मैंने सोचा कि यह वही होगा। थोड़ा और परीक्षण दिखाता है कि अगर मैंने निष्पादन योग्य को शॉर्टकट बनाया है, तो शॉर्टकट की "स्टार्ट इन" संपत्ति को कुछ (जैसे "सी: \") में संशोधित किया गया है, तो यही वह है जो StartInfo.WorkingDirectory में था। – Cyberherbalist

1

पर देखा है क्या आपने Application.ExecutablePath को आजमाया है?

वैकल्पिक रूप से, वहाँ कई पथ से Application