5

मैंने एक कंसोल ऐप बनाया है (विजुअल स्टूडियो 2010 का उपयोग करके) जो कमांड तर्क पढ़ सकता है।एक सी # कंसोल ऐप चलाएं। एपलेशन फ़ाइल प्रकार के साथ .एएटी

जब मैं डिबग, मैं कुछ परीक्षण मानकों जो परियोजना में स्थापित कर रहे हैं पार्स> [परियोजना का नाम] गुण ... -> डीबग -> कमांड लाइन तर्क:

यह पढ़ता है: "parametername1 | parametervalue1" "parametername2 | parametervalue2" "parametername3 | parametervalue3"

मैं मानकों को पढ़ने के लिए निम्न कोड का प्रयोग किया:

for (Int16 argumentsCount = 0; argumentsCount < args.Length; argumentsCount++) 
{ 
    String[] parameterItem = args[argumentsCount].Split('|'); 
    String parameterName = parameterItem[0].ToString(); 
    String parameterValue = parameterItem[1].ToString(); 
    /*code continues*/ 

} 

जब मैं डिबग मोड में चलाने के अनुप्रयोग यह सिर्फ ठीक काम करता है और सभी मापदंडों को पढ़ रहे हैं।

मैं तो किसी सर्वर के लिए एप्लिकेशन प्रकाशित किया है और यह सुनिश्चित किया है कि यह सही अनुमतियां (प्रदर्शन के प्रयोजनों के लिए मान लीजिए कि साथ स्थापित किया गया था यह सी पर है: \ MyApp और अनुपालन कोड

MyApp.application में रहता है मैं तो एक बैच स्क्रिप्ट एप्लिकेशन कार्यान्वित बनाया * बल्ला निम्न आदेश शामिल हैं:।

"C:\MyApp\MyApp.application" "parametername1|parametervalue1" "parametername2|parametervalue2" "parametername3|parametervalue3" 

आवेदन के रूप में काम करता है इस तरह की कार्यान्वित जब मैं बैच चलाने ... लेकिन ... मेरे मापदंडों में से कोई भी कर रहे हैं मेरे ऐप द्वारा प्राप्त किया जा रहा है। मुझे यह पता है क्योंकि मैंने कुछ कोडों के साथ पुन: संकलित और प्रकाशित किया है ताकि यह पढ़ने के लिए कि कितने पैरामीटर फिर से चल रहे हैं साथ ceived:

Console.Write("Arguments " + args.Length.ToString()); 

और उस तर्क से पता चलता: 0

कर सकते हैं किसी कृपया मुझे बताओ कैसे अनुप्रयोग चलाने और मेरे मापदंडों/आदेश पंक्ति तर्क पार्स करने के लिए मेरी बैच स्क्रिप्ट लिखने के लिए।

+0

/astandard wayofdoingit? –

उत्तर

2

ईटीए: कभी नहीं। .exe की बजाय आपकी समस्या .application है। अपने फ़ाइलों के समूह में देखो क्या .exe की तुलना में .application के साथ होता है:

> assoc .application 
.application=Application.Manifest 

> ftype Application.Manifest 
Application.Manifest=rundll32.exe dfshim.dll,ShOpenVerbApplication %1 

> assoc .exe 
.exe=exefile 

> ftype exefile 
exefile="%1" %* 

आप क्या वहाँ पारित हो जाता है में अंतर देखते हैं? अर्थात् सामान्य निष्पादन योग्य कमांड लाइन तर्क प्राप्त करते हैं (%*)। तो मुझे लगता है कि आपको निष्पादन योग्य मैनिफेस्ट के बजाय निष्पादन योग्य का उपयोग करना चाहिए या जो भी .application वास्तव में है (मैंने कभी इसे जंगली, ईमानदारी से नहीं देखा है)।


एक काफी कम से कम परीक्षण कार्यक्रम

class Args { 
    static void Main(string[] args) { 
     for (int i = 0; i < args.Length; i++) { 
      System.Console.WriteLine("[{0}]=<{1}>", i, args[i]); 
     } 
    } 
} 

यह मेरे लिए ठीक काम करता है के साथ

।निम्नलिखित बैच फ़ाइल:

@"args.exe" "parametername1|parametervalue1" "parametername2|parametervalue2" "parametername3|parametervalue3" 

पैदावार निम्नलिखित उत्पादन:

[0]=<parametername1|parametervalue1> 
[1]=<parametername2|parametervalue2> 
[2]=<parametername3|parametervalue3> 

तो मुझे लगता है कि वहाँ कुछ कोड में गलत क्या आप हमें नहीं दिखा था। हो सकता है कि आप वास्तव में अपने सी # एप्लिकेशन में कमांड लाइन तर्क का उपयोग नहीं कर रहे हैं, बल्कि इसके बजाय एक अलग string[] का संदर्भ लें?

+0

बहुत बहुत धन्यवाद दोस्तों। मेरा मुद्दा वास्तव में था कि मैं .plication फ़ाइल निष्पादित कर रहा था। .exe प्राप्त करने के लिए मैं बस प्रोजेक्ट बिन/डीबग निर्देशिका में गया और मेरी तैनाती निर्देशिका में .exe की प्रतिलिपि बनाई। मैंने फिर .exe निष्पादित करने के लिए अपनी बैच स्क्रिप्ट को संशोधित किया और जब मैंने फिर से अपनी बैच स्क्रिप्ट चलाई ... अरे प्रतिष्ठा, यह काम किया! तो मेरी बैच स्क्रिप्ट अंत में इस तरह दिखाई दे रही थी: "सी: \ MyApp \ MyApp.exe" "parametername1 | parametervalue1" "parametername2 | parametervalue2" "parametername3 | parametervalue3" – Fab

-1

पाइप चरित्र | बैच फ़ाइलों में एक विशेष अर्थ है। चीजों को आसान बनाने के लिए मैं एक अलग चरित्र का उपयोग करने का सुझाव दूंगा। अन्यथा आपको पाइप चरित्र का उपयोग करने के लिए Escape Character का उपयोग करना होगा। पाइप | से पहले

"C:\MyApp\MyApp.application" "parametername1^|parametervalue1" "parametername2^|parametervalue2" "parametername3^|parametervalue3" 

टिप्पणी कैरट ^: यह शायद इस प्रकार दिखाई देगा।

+0

हाय, वापस पाने के लिए धन्यवाद। मैंने "^" चरित्र का उपयोग करने की कोशिश की लेकिन यह अभी भी काम नहीं कर रहा है। मेरी बैच स्क्रिप्ट के साथ कुछ गलत होना चाहिए और जिस तरह से मैं अपने पैरामीटर को पार्स करता हूं ... मैं इसे समझ नहीं सकता। कोई भी? – Fab

+2

'|' समस्या नहीं है, क्योंकि वे इसे सही तरीके से उद्धृत कर रहे हैं। यह आवेदन के लिए सही ढंग से पारित हो जाता है। – Joey

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