2009-04-12 23 views
21

के बाहर कमांड लाइन पैरामीटर का उपयोग कैसे करें मैं एक .NET क्लास लिख रहा हूं जिसे प्रक्रिया की कमांड लाइन को पार्स करने की आवश्यकता है। मैं मुख्य() विधि और उस वर्ग के बीच निर्भरता नहीं चाहता हूं। कक्षा कमांड लाइन तक कैसे पहुंच सकती है?मुख्य में सी #

उत्तर

37

कॉल Environment.GetCommandLineArgs() पर कॉल करें।

+2

GetCommandLineArgs है [गंभीरता से त्रुटिपूर्ण] (http://stackoverflow.com/questions/9287812/backslash-and-quote-in-command-line-arguments)। से बचें। प्रचार कीजिये। – Neolisk

1
System.Diagnostics.Process.GetCurrentProcess().StartInfo.Arguments 
+0

वास्तव में, यह काम नहीं प्रतीत होता है। यह हमेशा खाली लगता है। Http://stackoverflow.com/questions/344056/why-is-startinfo-processstartinfo-always-empty – Carsten

1

अपने एप्लिकेशन के विकल्प रखने वाली कक्षा बनाएं। मुख्य विधि में उस वर्ग का एक उदाहरण बनाएं, इसे कमांड लाइन तर्क के साथ प्रारंभ करें, और उसे आवश्यक कक्षाओं में पास करें।

वैकल्पिक रूप से, आप उसके बाद यह एक CustomConfigClass.Create() विधि Environment.GetCommandLineArgs() का उपयोग करता है के माध्यम से बनाया होने से वर्ग किसी भी समय initialised हो सकता था।

पहला विकल्प मेरी सिफारिश होगी, क्योंकि यह कक्षा परीक्षण के लिए तैयार करने के लिए कक्षा को आसान बनाता है और कमांड लाइन पर निर्भरता के कारण आवेदन को तोड़ने के बाद बाद की तारीख में कॉन्फ़िगरेशन की वैकल्पिक विधि पर स्विच करता है।

+0

देखें पहला विकल्प अभी भी अन्य वर्ग के बारे में जानने के लिए मुख्य विधि की आवश्यकता है, इसलिए यह मेरी समस्या का समाधान नहीं करता है। मैं एक आईओसी कंटेनर का उपयोग कर रहा हूं, इसलिए मैं एक ऐसी सेवा तैयार करूंगा जो GetCommandLineArgs कार्यक्षमता का खुलासा करे, और मेरी दूसरी सेवा इस पर निर्भर करे। धन्यवाद। –

+1

हालांकि यह मेरे बिंदु को थोड़ा याद करता है, हालांकि। यदि आप आईओसी का उपयोग कर रहे हैं, तो कमांड लाइन तर्कों को वापस करने के लिए कोई सेवा नहीं है, एक सेवा इंटरफ़ेस है जो कॉन्फ़िगर देता है, और इसे उस वर्ग के साथ कार्यान्वित करता है जो इसे कमांड लाइन से प्राप्त करता है। इस तरह आप यूनिट परीक्षण के लिए किसी अन्य वर्ग के साथ प्रतिस्थापित कर सकते हैं। –

-2

स्ट्रिंग [] myStr = Environment.GetCommandLineArgs();

उदाहरण को पूरा करने के लिए हमेशा अच्छा होता है।

4

तो आप का उपयोग NET कम्पैक्ट फ्रेमवर्क, Environment.GetCommandLineArgs() विधि लागू नहीं है और System.Diagnostics.Process.GetCurrentProcess()। StartInfo.Arguments हमेशा रिक्त स्ट्रिंग देता है, तो आप मुख्य कार्य का उपयोग करना चाहिए और अपने अन्य वर्गों के लिए तर्क पास करें।

एक उदाहरण:

[MTAThread] 
static void Main(String[] commandLineArguments) 
{ 
    CommandLineHelper.parse(commandLineArguments); 
} 

public static class CommandLineHelper 
{ 
    public static void parse(String[] commandLineArguments) { 
    // add your code here 
    } 
} 
+0

कॉम्पैक्ट फ्रेमवर्क के लिए धन्यवाद। मेरे मामले में जब मैं निर्दिष्ट किया गया था तो मुख्य फॉर्म नहीं दिखाना चाहता था, ताकि exe चुप मोड में चलेगा, लेकिन जैसा कि आपने सुझाव दिया है कि आप उन तर्कों को स्थिर वर्ग पर संग्रहीत कर सकते हैं जो सभी रूपों के लिए उपलब्ध होगा आवेदन। यह किसी भी ढांचे में काम करना चाहिए। यहां रुचि रखने वालों के लिए मेरा कोड था। [MTAThread] स्थैतिक शून्य मुख्य (स्ट्रिंग [] cmd) { अगर (cmd.Length == 0) एप्लिकेशन। रुन (नया frmMain()); अन्य संदेशबॉक्स। शो (cmd [0]); } – kuklei

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