कमांड प्रॉम्प्ट कैसे पता करता है कि बाहर निकलने के लिए कब इंतजार करना है?


90

मैं C # में एक Windows कमांड प्रॉम्प्ट री-कोड करने का प्रयास कर रहा था। मैं सोच रहा था कि कमांड प्रॉम्प्ट को कैसे पता चलेगा कि कब प्रक्रिया का इंतजार करना शुरू हो गया और कब बाहर निकलने के लिए कॉल करने की प्रक्रिया का इंतजार नहीं करना चाहिए।

उदाहरण के लिए, यदि आप कमांड प्रॉम्प्ट "नोटपैड" में टाइप करते हैं, तो नोटपैड लॉन्च होगा, लेकिन आप अभी भी अन्य कमांड निष्पादित कर सकते हैं। हालाँकि, यदि आप एक उपयोगिता जैसे अधिक.com, ping.exe, या कोई अन्य उपयोगिता खोलते हैं, तो यह आपको किसी अन्य आदेश को निष्पादित करने से पहले निष्पादित प्रोग्राम के समाप्त होने तक प्रतीक्षा करेगा।

कमांड प्रॉम्प्ट कैसे पता करता है कि बाहर निकलने का इंतजार कब करना है, और यह व्यवहार C # में कैसे अनुकरण किया जा सकता है?


13
पहला पहला सवाल!
रोटम

2
बहुत ही बुनियादी स्तर पर, GUI आधारित कार्यक्रमों को बुलाया जाता है और निष्पादन तुरंत वापस आता है। ऐसा इसलिए हो सकता है क्योंकि शेल कमांड को इसके साथ बातचीत करने की उम्मीद नहीं है?
शशाकलेश

जवाबों:


122

यदि अनुप्रयोग एक Win32 GUI अनुप्रयोग है, तो यह बस चलेगा और कमांड प्रॉम्प्ट इसके बाहर निकलने की प्रतीक्षा नहीं करेगा।

यदि एप्लिकेशन एक कंसोल एप्लिकेशन है, तो यह कमांड प्रॉम्प्ट में चलेगा और कमांड प्रॉम्प्ट को वापस पाने के लिए आपको इसके खत्म होने तक इंतजार करना होगा।

संपादित करें:

ठीक है। ऐसा लगता है कि आपको तकनीकी स्पष्टीकरण की आवश्यकता है। यदि आप अपने एप्लिकेशन में उसी सुविधा का अनुकरण करना चाहते हैं, तो आप यहांIMAGE_OPTIONAL_HEADER EXE फ़ाइलों की जांच कर सकते हैं

अंदर IMAGE_OPTIONAL_HEADER, वहाँ है:

 WORD                 Subsystem;

If SubSystem == 0x02 इसका मतलब है कि यह एक जीयूआई अनुप्रयोग है।

If SubSystem == 0x03 इसका मतलब है कि यह एक कमांड प्रॉम्प्ट ऐप है।

संपादित करें 2:

यदि आप इसे क्रिया में देखना चाहते हैं:

  1. Http://www.ntcore.com/exsuite.php डाउनलोड करें

  2. अपने डेस्कटॉप पर calc.exe या notepad.exe कॉपी करें

  3. CFF एक्सप्लोरर में कॉपी किए गए calc.exe को खोलें

  4. Nt Headers में नेविगेट करें -> वैकल्पिक हेडर

  5. सबसिस्टम को 0x002 से 0x003 में बदलें

  6. बचाओ

अब नया संशोधित कैल्क चलाएं और आप कमांड प्रॉम्प्ट को इसके समाप्त होने की प्रतीक्षा करेंगे।


2
@SudhakarTillapudi, आपका स्वागत है, मैंने और अधिक विवरणों के साथ उत्तर अपडेट किया है, आशा है कि यह अधिक व्याख्या करेगा।
72DFBF5B A0DF5BE9

3
यह वास्तव में जानकारीपूर्ण है एक बार फिर से आप मुझे धन्यवाद देने के लिए धन्यवाद :)
सुधाकर तिलपुड़ी

8

कमांड प्रॉम्प्ट से डिफ़ॉल्ट GUI प्रोग्राम को एक अलग प्रक्रिया / कांटा में स्पॉन करना है। हालाँकि, आप अपने कमांड प्रॉम्प्ट / शेल स्क्रिप्ट के साथ नोटपैड (या अन्य GUI प्रोग्राम) इनलाइन चला सकते हैं:

start /w notepad.exe

इस प्रकार, कमांड प्रॉम्प्ट / शेल स्क्रिप्ट केवल नोटपैड। Exe प्रक्रिया समाप्त होने के बाद जारी रहती है।

आशा है कि इस मदद करता है, TW


3

जब आप एक नई प्रक्रिया शुरू करते हैं, तो इस संदर्भ में एक GUI एप्लिकेशन जो वास्तव में प्रॉम्प्ट की सीमाओं के बाहर काम करता है, प्रॉम्प्ट इंतजार नहीं करेगा। लेकिन, यदि आप एक कमांड चलाते हैं जो पूरी तरह से एक प्रॉम्प्ट के वर्तमान उदाहरण की सीमाओं के तहत काम करता है, तो यह इंतजार करता है।

तो, कमांड notepadसिर्फ नोटपैड एप्लिकेशन को शुरू करता है और एप्लिकेशन का नियंत्रण छोड़ देता है। जबकि, कमांड प्रॉम्प्ट के ipconfigडोमेन (नहीं यह एप्लिकेशन डोमेन नहीं है ) के तहत चलता है ।

अत्यंत सामान्यीकृत करने के लिए, जब आप Process.Startअपने C # समतुल्य का उपयोग करते हैं, तो प्रतीक्षा न करें। यह वैसे भी नहीं होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.