विंडोज और कंसोल अनुप्रयोग के बीच अंतर


39

विंडोज और कंसोल अनुप्रयोगों के बीच क्या अंतर हैं?

विज़ुअल सी ++ में कोई नई प्रोजेक्ट बनाते समय, यह उपर्युक्त में से किसी एक को चुनने के लिए कहता है।

62

एकमात्र अंतर यह है कि एक कंसोल एप्लिकेशन हमेशा एक कंसोल को जन्म देता है यदि यह एक से शुरू नहीं होता है (या कंसोल सक्रिय रूप से स्टार्टअप पर दबाया जाता है)। दूसरी ओर, एक विंडोज़ एप्लिकेशन कंसोल नहीं बनाता है। यह अभी भी एक मौजूदा कंसोल से जुड़ा हुआ है या AllocConsole का उपयोग कर एक नया बना सकता है।

यह विंडोज अनुप्रयोगों को जीयूआई अनुप्रयोगों या पृष्ठभूमि अनुप्रयोगों के लिए बेहतर अनुकूल बनाता है क्योंकि आप आमतौर पर उन लोगों के लिए टर्मिनल विंडो नहीं बनाना चाहते हैं।

अधिक तकनीकी नोट पर, एक कंसोल और एक Windows निष्पादन के बीच फर्क सिर्फ इतना है exe फ़ाइल का पीई शीर्षक में एक बाइट है। मैन्युअल रूप से इस बाइट को टॉगल करना (उदाहरण के लिए हेक्स संपादक का उपयोग करना) एप्लिकेशन प्रकार को परिवर्तित करता है। यह एक अच्छी तरह से प्रकाशित हैक है जिसका उपयोग VB6 में कंसोल अनुप्रयोग बनाने के लिए किया जाता है (जहां इस प्रकार का एप्लिकेशन स्पष्ट रूप से समर्थित नहीं था)।

किसी उप-प्रकार के अनुप्रयोग को निर्धारित करने और बदलने के लिए, आपको पीई हेडर के हिस्सों को पढ़ने की आवश्यकता है। उपप्रणाली डेटा का पता निश्चित नहीं है, क्योंकि यह वैकल्पिक फ़ाइल शीर्षलेख का हिस्सा है, जिसकी स्थिति DOS फ़ाइल शीर्षलेख में संग्रहीत पते द्वारा निर्धारित की जाती है (सदस्य e_lfanew में)। यह पता वास्तव में _IMAGE_NT_HEADERS रिकॉर्ड को इंगित करता है, जो बदले में IMAGE_OPTIONAL_HEADER32 संरचना शामिल करता है। इसमें int161) सदस्य Subsystem नामक सदस्य है। विंडोज़ एप्लिकेशन के लिए सदस्य का मूल्य 2 और कंसोल एप्लिकेशन के लिए 3 है। अन्य उपप्रणाली मौजूद हैं (विशेष रूप से, पॉज़िक्स और कर्नेल)। मैंने एक एप्लिकेशन के सबसिस्टम को बदलने के लिए एक छोटा वीबी 6 एप्लीकेशन लिखा है, जिसे ActiveVB से स्रोत कोड के रूप में डाउनलोड किया जा सकता है।

पीई प्रारूप बहुत अच्छी तरह से प्रलेखित नहीं है लेकिन यह दस्तावेज़ एक परिचय के रूप में कार्य कर सकता है: Peering Inside the PE: A Tour of the Win32 Portable Executable File Format। इस सदस्य का सबसे महत्वपूर्ण बाइट हमेशा 0. केवल कम से कम महत्वपूर्ण बाइट परिवर्तन हैं:


1) यह वास्तव में मेरे दावा है कि केवल एक बाइट अलग खंडन नहीं करता है।

जब आप एक सांत्वना आवेदन शुरू, कमांड प्रॉम्प्ट सांत्वना आवेदन बाहर निकलता है जब तक वापस नहीं करता है:

  0

धन्यवाद कोनराड के साथ सबसिस्टम बदल सकते हैं - महान :-) 22 feb. 092009-02-22 13:24:33

  0

@Rakesh, आप अगर आपको यह पसंद है तो उसे अपने समाधान को स्वीकार करना चाहिए, इसका जवाब उत्तर के बगल में छोटा वी है। 22 feb. 092009-02-22 13:27:07

  0

@ ओलाफुर, क्या आप कृपया मुझे बता सकते हैं कि उत्तर के बगल में छोटे वी के ऊपर मूल्य '4' का महत्व क्या है? 22 feb. 092009-02-22 13:29:21

  0

कि "ऊपर वोट" की संख्या है - 4 लोगों (5 अब) ने इस उत्तर के पक्ष में मतदान किया है। 22 feb. 092009-02-22 13:36:16

  0

प्रश्न के बगल में '2' क्या है? 22 feb. 092009-02-22 13:39:15

  0

संदर्भित डीएलएल में भी अंतर नहीं हैं? 22 feb. 092009-02-22 13:40:13

  0

@ राकेश - आपके प्रश्न के लिए उपरोक्त संख्या 22 feb. 092009-02-22 13:40:39

  0

@ सोपबॉक्स: अद्यतन उत्तर देखें। पता तय नहीं है, इसकी गणना की जानी चाहिए। मैंने इस डेटा को पढ़ने के लिए कुछ वीबी 6 कोड के लिए एक लिंक पोस्ट किया है। एमएसडीएन लेख यह भी दिखाता है कि यह कैसे करें। 22 feb. 092009-02-22 16:15:27

  0

मेरे पिता सिर्फ एक कस्टम प्रोग्राम के साथ लिंकर को प्रतिस्थापित करते थे जो उचित फ़ाइल में लिंकर कमांड लाइन बदल देता था और फिर उस पर वास्तविक लिंकर चलाता था। अंतिम परिणाम निष्पादन योग्य में बाइट को टॉगल करने जैसा ही है! 31 may. 132013-05-31 05:10:53


1

कंसोल आवेदन (शुरू/चलाने/cmd)

एक खिड़की आवेदन पूर्व निर्धारित है, ताकि आप एक जीयूआई एप्लिकेशन है जो Windows परिवेश में चलता कार्यक्रम कर सकते हैं एक विंडोज़ कमांड लाइन से चलाता है।


15

अंतर कोनराड ने उल्लेख किया इसके अलावा, सांत्वना और Windows अनुप्रयोगों को अलग ढंग से जब कमांड प्रॉम्प्ट से सहभागी बुलाया व्यवहार करते हैं। जब आप विंडोज़ एप्लिकेशन शुरू करते हैं, तो कमांड तुरंत लौटाता है।

यह बैच फ़ाइलों के लिए सच नहीं है; जब तक एप्लिकेशन निकलता है तब तक वे हमेशा इंतजार करेंगे। (आप प्रतीक्षा किए बिना आवेदन शुरू करने के लिए हमेशा start कमांड का उपयोग कर सकते हैं।)


2

अंतर जिस तरह से ऐप्स को स्टब किया गया है, उसमें अंतर है। जब आप कंसोल टेम्पलेट का उपयोग करते हैं, तो आपके पास एक स्टब है जो कंसोल में फंस जाएगा। यदि आप पहले से ही कंसोल में चल रहे हैं, तो यह कॉल को अनदेखा करने के लिए अनदेखा करता है।

उसी टोकन द्वारा, एक विंडोज ऐप को डिफ़ॉल्ट रूप से डिज़ाइन किया गया है। यदि आप इसे साफ़ करना चाहते हैं, तो आप एक फॉर्मलेस विंडोज फॉर्म एप्लिकेशन बना सकते हैं जो कंसोल विंडो के बिना अनिवार्य रूप से कंसोल एप्लिकेशन है।

जहां तक ​​ऐप की गड़बड़ी होती है, वे अनिवार्य रूप से वही होते हैं। संकलन चरण में प्रमुख अंतर जोड़ा जाता है।


1

संदेश लूप भी अंतर में से एक है:

http://en.wikipedia.org/wiki/Message_loop_in_Microsoft_Windows


2

आप EDITBIN.exe (MSDN Entry on EDITBIN.exe)