क्या रीडायरेक्ट किए गए stdout / stderr के साथ बाल प्रक्रिया छवियों को लोड करने के लिए एक विंडोज प्रोग्राम है?


1

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

चूंकि यह प्रोग्राम एक संलग्न कंसोल विंडो के बिना भी काम करता है और चूंकि यह अन्यथा GUI अनुप्रयोग है, इसलिए मैं उपयोगकर्ताओं को माता-पिता या संलग्न कंसोल के बारे में भ्रमित होने से बचाऊंगा - यह प्रोग्राम डिबगिंग को छोड़कर सभी उपयोग मामलों के लिए एक के बिना सबसे अच्छा उपयोग किया जाता है।

अब, मैं आउटपुट प्राप्त करने में सक्षम होना चाहता हूं, तब भी जब कोई कंसोल विंडो का उपयोग नहीं किया जाता है। मैं विंडोज में प्रोसेस फाइल हैंडल मैनेजमेंट की बारीकियों पर बड़ा अस्पष्ट हूँ।

क्या कोई ऐसा प्रोग्राम उपलब्ध है जो किसी प्रोग्राम को सबप्रोसेस के रूप में लॉन्च करने के लिए बनाया गया है, जिसमें stdout और stderr को एक फाइल या कई फाइलों में रीडायरेक्ट किया गया है?

मुझे पता है कि अच्छे पुराने कमांड दुभाषिया और पॉवर्सशेल आपको ऐसा करने देते हैं, लेकिन वे केवल एक कंसोल विंडो के साथ ऐसा करते हैं, और मैं कुछ ऐसा चाहता हूं जिसमें ऐसी कोई खिड़की न हो। एक दृश्य मूल स्क्रिप्ट होस्ट, शायद? क्या वह अब भी है? एन वोग ? कोई और उपाय?

जवाबों:


1

मैं थोड़ा सा हैरान हूँ कि कैसे यह प्रोग्राम कंसोल और GUI दोनों को सपोर्ट करता है Microsoft ने दोनों मोडों को पारस्परिक रूप से अनन्य बनाया है।

Microsoft आलेख GUI और कंसोल एप्लिकेशन दोनों के रूप में आवेदन कैसे करें? यह कहता है:

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

कुछ लोग चाहते हैं कि उनका आवेदन इनपुट के आधार पर अलग तरह से व्यवहार करे। यदि इनपुट होते हैं, तो एप्लिकेशन कंसोल एप्लिकेशन की तरह व्यवहार करता है। यदि कोई इनपुट नहीं है, तो यह GUI अनुप्रयोगों की तरह व्यवहार करता है।

यह तब दो संभावित समाधानों को सूचीबद्ध करता है।

  1. .com बनाम .exe छल ( .com हमेशा से पहले पाया .exe )

VisualStudio मामले में, वास्तव में दो बायनेरिज़ हैं: devenv.com और devenv.exe। Devenv.com एक कंसोल ऐप है। Devenv.exe एक GUI ऐप है। जब आप devenv टाइप करते हैं, तो Win32 प्रोबिंग नियम के कारण, devenv.com निष्पादित होता है। यदि कोई इनपुट नहीं है, तो devenv.com devenv.exe लॉन्च करता है, और खुद को बाहर निकालता है। यदि इनपुट हैं, तो devenv.com उन्हें सामान्य कंसोल ऐप के रूप में संभालता है।

  1. प्रतिक्रिया विधि

Ildasm मामले में, केवल एक बाइनरी है: ildasm.exe। इसे पहले GUI एप्लिकेशन के रूप में संकलित किया जाता है। बाद में editbin.exe का उपयोग कंसोल सबसिस्टम के रूप में चिह्नित करने के लिए किया जाता है। इसकी मुख्य विधि में यह निर्धारित करता है कि इसे कंसोल मोड या GUI मोड के रूप में चलाने की आवश्यकता है या नहीं। यदि GUI मोड के रूप में चलाने की आवश्यकता है, तो यह स्वयं को GUI ऐप के रूप में पुन: लॉन्च करता है।

मुझे नहीं पता कि आपके कार्यक्रम में किस विधि का उपयोग किया गया है, और यह दिलचस्प होगा यह पता लगाने के लिए। स्वतंत्र प्रक्रिया की निगरानी आप मामले का पता लगाने में मदद कर सकते हैं।

किसी भी मामले में, यदि कंसोल के माध्यम से प्रोग्राम लॉन्च करने की आपकी समस्या कंसोल की है काली खिड़की जो कार्यक्रम के पीछे दिखाई देती है, फिर एक समाधान है। यदि आप कंसोल को छिपे हुए के रूप में लॉन्च करते हैं, तो यह GUI के प्रदर्शन को प्रभावित नहीं करता है जो अभी भी दिखाई देगा।

पोस्ट पर मेरा जवाब देखें पूरी तरह से छिपे हुए तरीके से एक बैच फ़ाइल चलाएँ । वर्णित समाधानों में से कोई भी काम करना चाहिए, जब तक आपके कार्यक्रम द्वारा चुनी गई विधि दोनों का समर्थन करने के लिए नहीं कंसोल और GUI इसे तोड़फोड़ करने का प्रबंधन करता है।


मुझे पूरा यकीन है कि कार्यक्रम एक विंडोज़ डेस्कटॉप (जीयूआई) अनुप्रयोग है जो बस कॉल करता है printf या कुछ अन्य सिस्टम फ़ंक्शन जो मानक आउटपुट फ़ाइल में लिखने का प्रयास करते हैं। चूंकि जीयूआई अनुप्रयोगों के लिए हैंडल आम तौर पर सेट नहीं होता है, इसलिए आउटपुट कहीं भी नहीं जाता है, लेकिन इसका मतलब यह नहीं है कि कार्यक्रम अन्यथा काम नहीं करता है - कॉल करने के लिए printf एक अपवाद या कुछ भी मत फेंको। मैंने अभी एक छोटा GUI एप्लिकेशन लिखा है जो कॉल करता है printf - कहीं भी कुछ भी नहीं दिखाई देता है लेकिन कार्यक्रम रुका नहीं है। यदि मैं एक मान्य मानक आउटपुट हैंडल संलग्न करता हूं, तो मुझे कम से कम आउटपुट पर कब्जा करना चाहिए।
amn

यदि यह प्रतिक्रिया नहीं करता है, तो यह एक कंसोल प्रोग्राम हो सकता है जो एक जीयूआई शुरू करता है, जो पूरी तरह से संभव है। छिपे हुए cmd विधि को अभी भी काम करना चाहिए अगर यह जो कुछ भी करता है उसके साथ संघर्ष नहीं करता है।
harrymc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.