2011-05-11 17 views
6

वह कुछ इस तरह का उपयोग करके सी # में कमांडलाइन को चलाने के लिए संभव है:पैरामीटर के साथ सी # से कमांडलाइन चलाएं?

process = new Process(); 
process.StartInfo.FileName = command; 
process.Start(); 

यदि कमांड स्ट्रिंग उदाहरण के लिए, पैरामीटर शामिल हों समस्या है:

C:\My Dir\MyFile.exe MyParam1 MyParam2 

यह काम नहीं करेगा और मैं डॉन ' टी इस स्ट्रिंग से पैरामीटर निकालने का तरीका देखें और इसे process.Arguments संपत्ति पर सेट करें? पथ और फ़ाइल नाम कुछ और हो सकता है, फ़ाइल को exe के साथ समाप्त नहीं होना चाहिए।

मैं इसे कैसे हल कर सकता हूं?

+0

तो, सवाल है, मैं कैसे एक 'FileName' और' Arguments' में एक कमांड लाइन विभाजित कर सकते हैं। – Jodrell

+0

लगता है जैसे आप ब्रेक पॉइंट खोजने के लिए नियमित अभिव्यक्ति चाहते हैं। कड़ाई से बोलते हुए, अगर फ़ाइल नाम में एक स्थान है, तो डबल कोट्स में होना चाहिए। इससे आपको बहुत मदद मिलेगी। क्या यह मामला है, आपके उदाहरण में फ़ाइल नाम 'सी: \\ मेरा' या' सी: \\ मेरी Dir \ MyFile.exe' है? संयोग से, क्या यह 'एम' बच निकला है? – Jodrell

+0

क्या फ़ाइल डॉट और किसी भी एक्सटेंशन के साथ समाप्त होती है? जैसे .com, .exe ... – ibram

उत्तर

5

अगर मैं सही ढंग से समझ मैं का प्रयोग करेंगे:

string command = @"C:\My Dir\MyFile.exe"; 
string args = "MyParam1 MyParam2"; 

Process process = new Process(); 
process.StartInfo.FileName = command; 
process.StartInfo.Arguments = args; 
process.Start(); 

आप एक पूरा स्ट्रिंग है कि आप पार्स करने के लिए मैं का प्रयोग करेंगे अन्य तरीकों दूसरों को यहाँ से आगे की जरूरत है। यदि आप प्रक्रिया में पैरामीटर जोड़ना चाहते हैं, तो उपर्युक्त का उपयोग करें।

2

दावा: यदि फ़ाइल नाम में कोई स्थान होता है, तो इसे डबल कोट्स में लपेटा जाना चाहिए।

यह निश्चित रूप से विंडोज़ में मामला है। अन्यथा नियम अधिक प्रासंगिक हो जाते हैं।

regex-matching-spaces-but-not-in-strings पर एक नज़र डालें, मुझे लगता है आप regex का उपयोग कर सकते हैं,

" +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)" 

Regex.Split() का उपयोग कर आप एक सरणी में लाइन आदेश कन्वर्ट करने के लिए। पहला भाग आपका फ़ाइल नाम होना चाहिए।

3

यह सबसे खराब समाधान हो सकता है, लेकिन यह एक सुरक्षित एक किए जा सकेंगे:

string cmd = "C:\\My Dir\\MyFile.exe MyParam1 MyParam2"; 
System.IO.FileInfo fi = null; 
StringBuilder file = new StringBuilder(); 
// look up until you find an existing file 
foreach (char c in cmd) 
{ 
    file.Append(c); 
    fi = new System.IO.FileInfo(file.ToString()); 
    if (fi.Exists) break; 
} 

cmd = cmd.Remove(0, file.Length); 
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo(fi.Name, cmd); 
System.Diagnostics.Process.Start(psi); 
+0

यह एक अच्छा विचार है, यह स्ट्रिंग की शुद्धता का अनुमान लगाने के लिए पर्यावरण के संदर्भ का उपयोग करता है। पार्श्व सोच के लिए +1। अगर वास्तव में कोई उद्धरण नहीं है तो भी काम करता है। – Jodrell

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