Wednesday, 31 January 2018

Useshellexecute - waitforexit


एलीना: आपके उत्तर के लिए धन्यवाद। इस MSDN डॉक्टर (msdn. microsoften-uslibraryhellip) के निचले भाग में कुछ नोट्स हैं जो संभावित डेडलॉक के बारे में चेतावनी देते हैं यदि आप दोनों रीडायरेक्ट किए गए स्टडआउट और स्टर्डर धाराओं के अंत में पढ़ते हैं तो सिंक्रोनस रूप से। यह कहना मुश्किल है कि क्या आपका समाधान इस मुद्दे पर अतिसंवेदनशील है या नहीं। साथ ही, ऐसा प्रतीत होता है कि आप प्रक्रिया 39 stdoutstaderr आउटपुट को वापस इनपुट के रूप में भेज रहे हैं। क्यूं कर। ) ndash मैथ्यू पियाट 26 सितंबर 16 4:42 यह 4.5 और बाद के संस्करण के लिए एक और आधुनिक उम्मीदवार, कार्य समानांतर पुस्तकालय (टीपीएल) आधारित समाधान है। उपयोग का उदाहरण कार्यान्वयन 5 अक्टूबर को 10 बजे उत्तर दिया गया I बात यह है कि यह सरल और बेहतर तरीका है (हमें ऑटोआरससेट एवेन्ट की ज़रूरत नहीं है): उत्तर 14 जून 12 बजे 14:29 उत्तर दिया गया है, लेकिन आप ऐसा नहीं करना चाहिए. फ़ाइलनाम पथ quotggsci. exequot quot अपने कोड को सरल बनाने के लिए या शायद कुछ quotecho कमांड के बराबर path quotggsci. exequot का पालन करने के लिए obeycommand. txtquot का पालन करें अगर आप वास्तव में एक अलग obeycommand. txt फ़ाइल का उपयोग नहीं करना चाहते हैं ndash Amit Naidu Jun 4 13 at 22:03 आपके समाधान में ऑटोआरससेटएवेंट की ज़रूरत नहीं है लेकिन आप चुनाव करते हैं। जब आप इवेंट का उपयोग करने के बजाय पोल करते हैं (जब वे उपलब्ध होते हैं) तो आप बिना किसी कारण के लिए सीपीयू का उपयोग कर रहे हैं और इससे पता चलता है कि आप खराब प्रोग्रामर हैं AutoResetEvent का उपयोग करते हुए अन्य के साथ तुलना में आपका समाधान वास्तव में खराब है। (लेकिन मैंने आपको -1 नहीं दिया क्योंकि आपने मदद करने की कोशिश की है)। ndash एरिक Ouellet 7 नवंबर 14 पर 18:38 मैं एक ही मुद्दा रहा था, लेकिन कारण अलग था हालांकि यह विंडोज 8 के तहत होगा, लेकिन विंडोज 7 के तहत नहीं। निम्नलिखित पंक्ति ने समस्या का कारण देखा है। समाधान UseShellExecute को अक्षम करने के लिए नहीं था अब मुझे एक शेल पॉपअप विंडो मिली है, जो अवांछित है, लेकिन कुछ खास नहीं होने की प्रतीक्षा करने वाले कार्यक्रम से बेहतर है। इसलिए मैंने इसके लिए निम्नलिखित कार्य-जोड़ा जोड़ा: अब मुझे केवल परेशानी का कारण यह है कि विंडोज 8 के तहत ऐसा क्यों हो रहा है पहली जगह पर। 13 जनवरी को 10:35 को उत्तर दिया मैंने एक ऐसा वर्ग बनाने की कोशिश की जो आपकी समस्या को हल करेगी जो अकसरसोनस स्ट्रीम का उपयोग करते हुए मार्क बियरर्स, रोब, स्टीवज्यू उत्तर लेते हुए आपकी समस्या को हल करेंगे। ऐसा करने से मुझे एहसास हुआ कि एसिंक्रोनस प्रोसेस आउटपुट स्ट्रीम से संबंधित एक बग पढ़ा गया है। आप ऐसा नहीं कर सकते: आपको सिस्टम प्राप्त होगा। अज्ञातऑपरेशन अपवाद मानकऑटो को पुनः निर्देशित नहीं किया गया है या प्रक्रिया अभी तक शुरू नहीं हुई है। फिर आपको प्रक्रिया शुरू होने के बाद एसिंक्रोनस आउटपुट को पढ़ना होगा: ऐसा करने से, रेस की स्थिति बनाओ क्योंकि आउटपुट स्ट्रीम आपको एसिंक्रोनस में सेट करने से पहले डेटा प्राप्त कर सकता है: तब कुछ लोग कह सकते हैं कि आपको स्ट्रीम से पहले ही पढ़ना होगा इसे अतुल्यकालिक से सेट करें लेकिन यही समस्या तब होती है तुल्यकालिक पढ़ने के बीच एक दौड़ की स्थिति होगी और स्ट्रीम को अतुल्यकालिक मोड में सेट किया जाएगा। वास्तविक प्रक्रिया में एक प्रक्रिया के आउटपुट स्ट्रीम के सुरक्षित असिंक्रोनस पठन को प्राप्त करने का कोई तरीका नहीं है, प्रक्रिया और प्रक्रिया स्टार्टइन्फो तैयार की गई है। आप संभावित रूप से अतुल्यकालिक पठन का उपयोग कर रहे हैं जैसे आपके केस के लिए अन्य उपयोगकर्ताओं द्वारा सुझाई गई। लेकिन आपको पता होना चाहिए कि आप दौड़ की स्थिति के कारण कुछ जानकारी याद कर सकते हैं। सिस्टम। डायग्नोस्टिक्स। प्रोसेस स्टार्ट इन्फ़ोक्लास विधानसभा: System. dll नामस्थान: सिस्टम। डायग्नोस्टिक्स सारांश प्रक्रिया शुरू करते समय उपयोग किए गए मानों का एक सेट निर्दिष्ट करता है। सी सिंटैक्स: सार्वजनिक सीलबंद श्रेणी प्रक्रिया स्टार्टइन्फो रिमार्क्स प्रोसेसस्टटाइन्फ़ो प्रोसेस घटक के साथ संयोजन में प्रयोग किया जाता है। जब आप प्रोसेस क्लास का इस्तेमाल करते हुए एक प्रक्रिया शुरू करते हैं, तो चलने की प्रक्रिया में संलग्न होने पर आपके पास उपलब्ध जानकारी के अलावा प्रक्रिया की प्रक्रिया हो सकती है। आपके द्वारा शुरू की जाने वाली प्रक्रिया के अधिक से अधिक नियंत्रण के लिए आप ProcessStartInfo वर्ग का उपयोग कर सकते हैं। आपको कम से कम ProcessStartInfo. FileName संपत्ति को सेट करना होगा, या तो मैन्युअल रूप से या कन्स्ट्रक्टर का उपयोग करना चाहिए। फ़ाइल नाम किसी भी आवेदन या दस्तावेज़ है। यहां एक दस्तावेज को किसी भी फाइल प्रकार के रूप में परिभाषित किया गया है जिसमें उसके साथ जुड़ी एक खुली या डिफ़ॉल्ट कार्यवाही है आप ऑपरेटिंग सिस्टम के माध्यम से उपलब्ध फ़ोल्डर विकल्प संवाद का उपयोग करके अपने कंप्यूटर के लिए पंजीकृत फ़ाइल प्रकार और उसके संबद्ध अनुप्रयोग देख सकते हैं। उन्नत बटन एक संवाद की ओर जाता है जो दिखाता है कि एक विशिष्ट पंजीकृत फ़ाइल प्रकार से जुड़ी एक खुली क्रिया है या नहीं। इसके अतिरिक्त, आप अन्य गुण सेट कर सकते हैं जो कि फाइल के साथ कार्रवाई करने के लिए परिभाषित करते हैं। आप System. Diagnostics. ProcessStartInfo. Verb (साझा स्रोत CLI) संपत्ति पर समर्थित नहीं करने के लिए ProcessStartInfo. FileName संपत्ति के प्रकार के लिए विशिष्ट मान निर्दिष्ट कर सकते हैं। उदाहरण के लिए, आप एक दस्तावेज़ प्रकार के लिए प्रिंट निर्दिष्ट कर सकते हैं। इसके अतिरिक्त, आप ProcessStartInfo. Arguments निर्दिष्ट कर सकते हैं गुणों को कमांड लाइन तर्क होने के लिए फ़ाइलों को खोलने के लिए प्रक्रिया खोलें। उदाहरण के लिए, यदि आप ProcessStartInfo. FileName प्रॉपर्टी में एक टेक्स्ट एडिटर एप्लिकेशन निर्दिष्ट करते हैं, तो आप संपादक द्वारा खोले जाने वाले टेक्स्ट फ़ाइल को निर्दिष्ट करने के लिए प्रोसेसस्टार्टइन्फो.अग्रेगमेंट प्रॉपर्टी का उपयोग कर सकते हैं। मानक इनपुट आमतौर पर कीबोर्ड है, और मानक आउटपुट और त्रुटि आमतौर पर मॉनिटर स्क्रीन होती है हालांकि, आप ProcessStartInfo. RedirectStandardInput का उपयोग कर सकते हैं ProcessStartInfo. RedirectStandardOutput और ProcessStartInfo. RedirectStandardError गुणों को इनपुट से इनपुट प्राप्त करने या फ़ाइल या अन्य डिवाइस में आउटपुट वापस लाने के लिए कारण। यदि आप Process. StandardInput का उपयोग करते हैं Process. StandardOutput। या Process. StandardError गुण प्रोसेस घटक पर, आपको पहले प्रोसेसस्टार्टइन्फ़ो संपत्ति पर संबंधित मूल्य सेट करना होगा। अन्यथा, जब आप स्ट्रीम में पढ़ते या लिखते हैं तो सिस्टम एक अपवाद फेंकता है। ऑपरेटिंग सिस्टम शेल का उपयोग कर प्रक्रिया शुरू करने के लिए निर्दिष्ट करने के लिए ProcessStartInfo. UseShellExecute सेट करें। आप किसी भी ProcessStartInfo संपत्ति का मूल्य उस समय तक बदल सकते हैं, जब प्रक्रिया शुरू होती है। आप प्रक्रिया शुरू करने के बाद, इन मानों को बदलने से कोई प्रभाव नहीं पड़ता है। System. Diagnostics. ProcessStartInfo सदस्य सूची: डिफ़ॉल्ट कन्स्ट्रक्टर इस प्रकार के राज्य को शुरू करने के लिए इस निर्माता को व्युत्पन्न क्लास कन्स्ट्रक्टर द्वारा कहा जाता है। प्रक्रिया शुरू करने के लिए फ़ाइल नाम निर्दिष्ट किए बिना ProcessStartInfo वर्ग के एक नए इंस्टेंस को प्रारंभ करता है। ओवरलोड किया गया:.ctor (string fileName) प्रक्रिया की एक नई आवृत्ति को शुरू करता है ProcessStartInfo वर्ग और एक फ़ाइल नाम निर्दिष्ट करता है जैसे कोई अनुप्रयोग या दस्तावेज़ जिसके साथ प्रक्रिया शुरू होती है। ओवरलोडेड:.कॉरक्टर (स्ट्रिंग फाइलनाम, स्ट्रिंग आर्गुमेंट्स) प्रोसेस्टस्टार्टइनफ़ो वर्ग के एक नए इंस्टेंस को शुरू करता है और एक आवेदन फ़ाइल नाम निर्दिष्ट करती है जिसके साथ प्रक्रिया शुरू करने के साथ-साथ आवेदन को पास करने के लिए कमांड लाइन तर्कों का एक सेट भी होता है। गेट या अनुप्रयोग शुरू करते समय उपयोग करने के लिए कमांड लाइन तर्कों का सेट सेट करता है। फ़ाइलों के लिए खोज पथ, अस्थायी फ़ाइलों के लिए निर्देशिका, एप्लिकेशन-विशिष्ट विकल्प, और अन्य समान जानकारी मिलती है। System. Diagnostics. ProcessStartInfo सदस्य विवरण ओवरलोडेड सीटीओआर 1 सारांश प्रोसेसस्टार्टइन्फो क्लास के एक नए इंस्टेंस की शुरुआत के बिना फ़ाइल नाम निर्दिष्ट किए बिना प्रक्रिया शुरू करने के लिए। डिफ़ॉल्ट कन्स्ट्रक्टर इस प्रकार के राज्य को शुरू करने के लिए इस निर्माता को व्युत्पन्न क्लास कन्स्ट्रक्टर द्वारा कहा जाता है। सी सिंटैक्स: रिमार्क्स आपको प्रक्रिया शुरू करने से पहले कम से कम प्रोसेस्टस्टाईटफ़ाईनफाइल नाम की संपत्ति निर्धारित करनी होगी। फ़ाइल नाम किसी भी आवेदन या दस्तावेज़ है। इस स्थिति में, किसी दस्तावेज़ को किसी भी फाइल प्रकार के रूप में परिभाषित किया जाता है जिसमें उसके साथ जुड़ी एक खुली या डिफ़ॉल्ट कार्यवाही होती है आप ऑपरेटिंग सिस्टम के माध्यम से उपलब्ध फ़ोल्डर विकल्प संवाद का उपयोग करके अपने कंप्यूटर के लिए पंजीकृत फ़ाइल प्रकार और उसके संबद्ध अनुप्रयोग देख सकते हैं। उन्नत बटन एक संवाद की ओर जाता है जो दिखाता है कि एक विशिष्ट पंजीकृत फ़ाइल प्रकार से जुड़ी एक खुली क्रिया है या नहीं। वैकल्पिक रूप से, आप प्रक्रिया शुरू करने से पहले अन्य गुणों को भी सेट कर सकते हैं। System. Diagnostics. ProcessStartInfo. Verb (साझा स्रोत CLI पर समर्थित नहीं) संपत्ति की आपूर्ति कार्यों को ले जाने के लिए, जैसे कि प्रिंट, साथ में निर्दिष्ट फ़ाइल ProcessStartInfo. FileName गुण। ProcessStartInfo. Arguments संपत्ति फ़ाइल को कमांड लाइन तर्कों को पास करने के लिए एक तरीका प्रदान करती है जब सिस्टम इसे खोलता है। ओवरलोडेड सीटीओआर 2 सारांश प्रोसेस्टस्टाईटइनफ़ो वर्ग के एक नए इंस्टेंस को शुरू करता है और एक फाइल नाम निर्दिष्ट करता है जैसे कि कोई अनुप्रयोग या दस्तावेज़ जिसके साथ प्रक्रिया शुरू होती है। सी सिंटैक्स: एक आवेदन या दस्तावेज जिसमें एक प्रक्रिया शुरू होनी है। रिमार्क्स फ़ाइल नाम किसी भी आवेदन या दस्तावेज़ है। इस स्थिति में, किसी दस्तावेज़ को किसी भी फाइल प्रकार के रूप में परिभाषित किया जाता है जिसमें उसके साथ जुड़ी एक खुली या डिफ़ॉल्ट कार्यवाही होती है आप ऑपरेटिंग सिस्टम के माध्यम से उपलब्ध फ़ोल्डर विकल्प संवाद का उपयोग करके अपने कंप्यूटर के लिए पंजीकृत फ़ाइल प्रकार और उसके संबद्ध अनुप्रयोग देख सकते हैं। उन्नत बटन एक संवाद की ओर जाता है जो दिखाता है कि एक विशिष्ट पंजीकृत फ़ाइल प्रकार से जुड़ी एक खुली क्रिया है या नहीं। आप इस निर्माता को कॉल करने के बाद प्रोसेसस्टार्टइनफ़ोफाइलनाम की संपत्ति बदल सकते हैं, उस समय तक कि प्रक्रिया शुरू होती है। आप प्रक्रिया शुरू करने के बाद, इन मानों को बदलने से कोई प्रभाव नहीं पड़ता है। ओवरलोडेड सीटीओआर 3 सारांश प्रोसेस्टस्टटाइन्फ़ो क्लास का एक नया इंस्टेंस आरंभ करता है और एक आवेदन फ़ाइल नाम निर्दिष्ट करता है जिसके साथ प्रक्रिया शुरू करने के साथ-साथ आवेदन को पास करने के लिए कमांड लाइन तर्कों का एक सेट भी होता है। सी सिंटैक्स: एक आवेदन जिसमें एक प्रक्रिया शुरू करने के लिए। प्रक्रिया शुरू होने पर एप्लिकेशन को पास करने के लिए कमांड लाइन तर्क। रिमार्क्स फ़ाइल नाम किसी भी आवेदन या दस्तावेज़ है। इस स्थिति में, किसी दस्तावेज़ को किसी भी फाइल प्रकार के रूप में परिभाषित किया जाता है जिसमें उसके साथ जुड़ी एक खुली या डिफ़ॉल्ट कार्यवाही होती है आप ऑपरेटिंग सिस्टम के माध्यम से उपलब्ध फ़ोल्डर विकल्प संवाद का उपयोग करके अपने कंप्यूटर के लिए पंजीकृत फ़ाइल प्रकार और उसके संबद्ध अनुप्रयोग देख सकते हैं। उन्नत बटन एक संवाद की ओर जाता है जो दिखाता है कि क्या एक विशिष्ट पंजीकृत फ़ाइल प्रकार से जुड़ी एक खुली क्रिया है। आप इस निर्माता को कॉल करने के बाद प्रोसेसस्टार्टइनफ़ोफाइलनाम या प्रोसेस्टस्टाईट इन्फ़ो.अग्रिगमेंट्स गुणों को बदल सकते हैं, जिस समय तक प्रक्रिया शुरू होती है। आप प्रक्रिया शुरू करने के बाद, इन मानों को बदलने से कोई प्रभाव नहीं पड़ता है। संपत्ति: तर्क (पढ़ें-लिखना) सारांश गेट या अनुप्रयोग शुरू करते समय उपयोग करने के लिए कमांड लाइन तर्कों के सेट को सेट करता है। सी सिंटैक्स: सम्पत्ति: पर्यावरणविभिन्नता (केवल-पढ़ने के लिए) सारांश फाइलों, अस्थायी फ़ाइलों के लिए निर्देशिका, अनुप्रयोग-विशिष्ट विकल्प, और अन्य समान जानकारी के लिए खोज पथ हो जाता है। सी सिंटैक्स: प्रॉपर्टी: रीडायरेक्ट स्टैण्डर्ड एरर (रीड-लिट) सारांश प्रोसेसेस इंस्टेंस प्रोसेस। स्टैंडर्ड ईर्रॉयर सदस्य को प्रक्रिया त्रुटि त्रुटि को इंगित करता है या नहीं मान सेट करता है, स्टेंडर्ड एरर स्ट्रीम के अलावा एक गंतव्य पर लिखने के लिए आपको सक्षम करता है (आमतौर पर मॉनिटर स्क्रीन)। किसी फ़ाइल या लॉग में त्रुटि डेटा लिखने के लिए उपयोग किया जाता है, उदाहरण के लिए। सी सिंटेक्स: रिमार्क्स प्रक्रिया घटक एक पाइप के माध्यम से एक बाल प्रक्रिया के साथ संचार करता है। यदि कोई बच्ची प्रक्रिया बफ़र को भरने के लिए पर्याप्त डेटा पाइप में लिखती है, तो बच्चे को तब तक अवरुद्ध कर दिया जाएगा जब तक कि माता-पिता पाइप से डेटा नहीं पढ़ते। यह डेडलॉक का कारण हो सकता है यदि आपका एप्लिकेशन मानक त्रुटि और मानक आउटपुट में सभी आउटपुट पढ़ रहा है, उदाहरण के लिए, निम्न C कोड का उपयोग कर। इस उदाहरण में, माता-पिता और बच्चे दोनों प्रक्रियाओं को अवरुद्ध कर दिया जाएगा, क्योंकि भरा हुआ पाइप बाल प्रक्रिया को पूरा करने से रोकता है, जबकि मूल प्रक्रिया को बाहर निकलने के लिए बच्चे की प्रक्रिया अनिश्चित काल तक प्रतीक्षा कर रही है। WaitForExit () से पहले ReadToEnd () को स्थानांतरित करके इस समस्या का समाधान किया जा सकता है। निम्नलिखित नुसार। एक समान समस्या उत्पन्न होती है, यदि आप दोनों मानक आउटपुट और मानक त्रुटि रीडायरेक्ट करते हैं और फिर दोनों को पढ़ने का प्रयास करते हैं, उदाहरण के लिए निम्न सी कोड का उपयोग कर। इस स्थिति में, अगर बाल प्रक्रिया मानक त्रुटि को कोई पाठ लिखती है तो यह प्रक्रिया को अवरुद्ध कर देगा, क्योंकि मूल प्रक्रिया मानक त्रुटि से पढ़ नहीं सकती है जब तक कि मानक आउटपुट से पढ़ना समाप्त नहीं हो जाता। हालांकि, प्रक्रिया समाप्त होने तक मूल प्रक्रिया मानक सिस्टम से नहीं पढ़ी जाएगी। इस स्थिति के लिए एक अनुशंसित समाधान दो धागे बनाने के लिए है ताकि आपका एप्लिकेशन एक अलग थ्रेड पर प्रत्येक स्ट्रीम का आउटपुट पढ़ सके। प्रॉपर्टी: रीडायरेक्ट स्टैंडर्ड इन्पुट (रीड-लिट) सारांश प्रक्रिया संकेत प्रक्रिया से प्रक्रिया कमांड इनपुट को पढ़ा जाता है या नहीं, यह दर्शाता है कि मानक इनपुट स्ट्रीम (आमतौर पर कुंजीपटल) के अलावा अन्य किसी स्रोत से पढ़ने के लिए आपको सक्षम मान या सेट करता है। फ़ाइल से डेटा पढ़ने के लिए उपयोग किया जाता है, उदाहरण के लिए। सी सिंटैक्स: प्रॉपर्टी: रीडायरेक्ट मानक ओटपुट (रीड-लिट) सारांश प्रोसेस इंस्टेंस प्रोसेस। स्टैन्डडऑन आउटपुट सदस्य को प्रक्रिया आउटपुट लिखा जाता है या नहीं, यह इंगित करता है कि आपको एक मानक आउटपुट स्ट्रीम (आमतौर पर मॉनिटर स्क्रीन)। किसी फ़ाइल में डेटा लिखने के लिए उपयोग किया जाता है, उदाहरण के लिए। सी सिंटेक्स: रिमार्क्स प्रक्रिया घटक एक पाइप के माध्यम से एक बाल प्रक्रिया के साथ संचार करता है। यदि कोई बच्ची प्रक्रिया बफ़र को भरने के लिए पर्याप्त डेटा पाइप में लिखती है, तो बच्चे को तब तक अवरुद्ध कर दिया जाएगा जब तक कि माता-पिता पाइप से डेटा नहीं पढ़ते। यह डेडलॉक का कारण हो सकता है यदि आपका एप्लिकेशन मानक त्रुटि और मानक आउटपुट में सभी आउटपुट पढ़ रहा है, उदाहरण के लिए, निम्न C कोड का उपयोग कर। इस उदाहरण में, माता-पिता और बच्चे दोनों प्रक्रियाओं को अवरुद्ध कर दिया जाएगा, क्योंकि भरा हुआ पाइप बाल प्रक्रिया को पूरा करने से रोकता है, जबकि मूल प्रक्रिया को बाहर निकलने के लिए बच्चे की प्रक्रिया अनिश्चित काल तक प्रतीक्षा कर रही है। WaitForExit () से पहले ReadToEnd () को स्थानांतरित करके इस समस्या का समाधान किया जा सकता है। निम्नलिखित नुसार। एक समान समस्या उत्पन्न होती है, यदि आप दोनों मानक आउटपुट और मानक त्रुटि रीडायरेक्ट करते हैं और फिर दोनों को पढ़ने का प्रयास करते हैं, उदाहरण के लिए निम्न सी कोड का उपयोग कर। इस स्थिति में, अगर बाल प्रक्रिया मानक त्रुटि को कोई पाठ लिखती है तो यह प्रक्रिया को अवरुद्ध कर देगा, क्योंकि मूल प्रक्रिया मानक त्रुटि से पढ़ नहीं सकती है जब तक कि मानक आउटपुट से पढ़ना समाप्त नहीं हो जाता। हालांकि, प्रक्रिया समाप्त होने तक मूल प्रक्रिया मानक सिस्टम से नहीं पढ़ी जाएगी। इस स्थिति के लिए एक अनुशंसित समाधान दो धागे बनाने के लिए है ताकि आपका एप्लिकेशन एक अलग थ्रेड पर प्रत्येक स्ट्रीम का आउटपुट पढ़ सके। प्रॉपर्टी: UseShellExecute (पठन-लिखित) सारांश प्रक्रिया को प्रारंभ करने के लिए ऑपरेटिंग सिस्टम शेल का उपयोग करने के लिए इंगित करता है कि क्या कोई मान हो या निर्धारित करता है। सी सिंटैक्स: इस संपत्ति को झूठा बनाने के लिए टिप्पणी आपको इनपुट, आउटपुट, और त्रुटि स्ट्रीम को रीडायरेक्ट करने में सक्षम बनाता है। जब आप प्रक्रियाओं को प्रारंभ करने के लिए ऑपरेटिंग सिस्टम शेल का उपयोग करते हैं, तो आप किसी भी दस्तावेज़ को शुरू करने में सक्षम होते हैं (जो किसी निष्पादन योग्य से जुड़ी कोई भी पंजीकृत फ़ाइल प्रकार होती है जिसमें एक डिफ़ॉल्ट खुली कार्रवाई होती है) और फाइल पर कार्य करना, जैसे मुद्रण, प्रक्रिया के साथ घटक। जब ProcessStartInfo. UseShellExecute गलत है आप प्रक्रिया घटक के साथ केवल निष्पादनयोग्य शुरू करने में सक्षम हैं। प्रॉपर्टी: वर्किंग डायरेक्टरी (पठन-लिट) सारांश आरंभ करने की प्रक्रिया के लिए प्रारंभिक निर्देशिका सेट हो जाती है या सेट करता है सी सिंटेक्स: रिमार्क्स यदि निर्देशिका पहले से ही सिस्टम पाथ वेरिएबल का भाग है, तो इस प्रॉपर्टी में निर्देशिका स्थान को दोहराना आवश्यक नहीं है। एलीना: आपके उत्तर के लिए धन्यवाद। इस MSDN डॉक्टर (msdn. microsoften-uslibraryhellip) के निचले भाग में कुछ नोट्स हैं जो संभावित डेडलॉक के बारे में चेतावनी देते हैं यदि आप दोनों रीडायरेक्ट किए गए स्टडआउट और स्टर्डर धाराओं के अंत में पढ़ते हैं तो सिंक्रोनस रूप से। यह कहना मुश्किल है कि क्या आपका समाधान इस मुद्दे पर अतिसंवेदनशील है या नहीं। साथ ही, ऐसा प्रतीत होता है कि आप प्रक्रिया 39 stdoutstaderr आउटपुट को वापस इनपुट के रूप में भेज रहे हैं। क्यूं कर। ) ndash मैथ्यू पियाट 26 सितंबर 16 4:42 यह 4.5 और बाद के संस्करण के लिए एक और आधुनिक उम्मीदवार, कार्य समानांतर पुस्तकालय (टीपीएल) आधारित समाधान है। उपयोग का उदाहरण कार्यान्वयन 5 अक्टूबर को 10 बजे उत्तर दिया गया I बात यह है कि यह सरल और बेहतर तरीका है (हमें ऑटोआरससेट एवेन्ट की ज़रूरत नहीं है): उत्तर 14 जून 12 बजे 14:29 उत्तर दिया गया है, लेकिन आप ऐसा नहीं करना चाहिए. फ़ाइलनाम पथ quotggsci. exequot quot अपने कोड को सरल बनाने के लिए या शायद कुछ quotecho कमांड के बराबर path quotggsci. exequot का पालन करने के लिए obeycommand. txtquot का पालन करें अगर आप वास्तव में एक अलग obeycommand. txt फ़ाइल का उपयोग नहीं करना चाहते हैं। ndash Amit Naidu Jun 4 13 at 22:03 आपके समाधान में ऑटोआरससेटएवेंट की ज़रूरत नहीं है लेकिन आप चुनाव करते हैं। जब आप इवेंट का उपयोग करने के बजाय पोल करते हैं (जब वे उपलब्ध होते हैं) तो आप बिना किसी कारण के लिए सीपीयू का उपयोग कर रहे हैं और इससे पता चलता है कि आप खराब प्रोग्रामर हैं AutoResetEvent का उपयोग करते हुए अन्य के साथ तुलना में आपका समाधान वास्तव में खराब है। (लेकिन मैंने आपको -1 नहीं दिया क्योंकि आपने मदद करने की कोशिश की है)। ndash एरिक Ouellet 7 नवंबर 14 पर 18:38 मैं एक ही मुद्दा रहा था, लेकिन कारण अलग था हालांकि यह विंडोज 8 के तहत होगा, लेकिन विंडोज 7 के तहत नहीं। निम्नलिखित पंक्ति ने समस्या का कारण देखा है। समाधान UseShellExecute को अक्षम करने के लिए नहीं था अब मुझे एक शेल पॉपअप विंडो मिली है, जो अवांछित है, लेकिन कुछ खास नहीं होने की प्रतीक्षा करने वाले कार्यक्रम से बेहतर है। इसलिए मैंने इसके लिए निम्नलिखित कार्य-जोड़ा जोड़ा: अब मुझे केवल परेशानी का कारण यह है कि विंडोज 8 के तहत ऐसा क्यों हो रहा है पहली जगह पर। 13 जनवरी को 10:35 को उत्तर दिया मैंने एक ऐसा वर्ग बनाने की कोशिश की जो आपकी समस्या को हल करेगी जो अकसरसोनस स्ट्रीम का उपयोग करते हुए मार्क बियरर्स, रोब, स्टीवज्यू उत्तर लेते हुए आपकी समस्या को हल करेंगे। ऐसा करने से मुझे एहसास हुआ कि एसिंक्रोनस प्रोसेस आउटपुट स्ट्रीम से संबंधित एक बग पढ़ा गया है। आप ऐसा नहीं कर सकते: आपको सिस्टम प्राप्त होगा। अज्ञातऑपरेशन अपवाद मानकऑटो को पुनः निर्देशित नहीं किया गया है या प्रक्रिया अभी तक शुरू नहीं हुई है। फिर आपको प्रक्रिया शुरू होने के बाद एसिंक्रोनस आउटपुट को पढ़ना होगा: ऐसा करने से, रेस की स्थिति बनाओ क्योंकि आउटपुट स्ट्रीम आपको एसिंक्रोनस में सेट करने से पहले डेटा प्राप्त कर सकता है: तब कुछ लोग कह सकते हैं कि आपको स्ट्रीम से पहले ही पढ़ना होगा इसे अतुल्यकालिक से सेट करें लेकिन यही समस्या तब होती है तुल्यकालिक पढ़ने के बीच एक दौड़ की स्थिति होगी और स्ट्रीम को अतुल्यकालिक मोड में सेट किया जाएगा। वास्तविक प्रक्रिया में एक प्रक्रिया के आउटपुट स्ट्रीम के सुरक्षित असिंक्रोनस पठन को प्राप्त करने का कोई तरीका नहीं है, प्रक्रिया और प्रक्रिया स्टार्टइन्फो तैयार की गई है। आप संभावित रूप से अतुल्यकालिक पठन का उपयोग कर रहे हैं जैसे आपके केस के लिए अन्य उपयोगकर्ताओं द्वारा सुझाई गई। लेकिन आपको पता होना चाहिए कि आप दौड़ की स्थिति के कारण कुछ जानकारी याद कर सकते हैं। कृपया यहां इस समस्या से जुड़े रहें, जहां मैं एक कार्य करने के लिए सीएमडी.एक्सए आग की कोशिश कर रहा हूं, लेकिन सीएमडी.एक्सए फ़ाइल को शुरू करने की आवश्यकता है व्यवस्थापक अधिकार और मैं फाइल को छिपाने के लिए और यहां तक ​​कि अगर मैं प्रक्रिया गुण प्रक्रिया WindowStyle. Hidden सेट wnt मैं एडमिन सही के साथ इस प्रक्रिया को कैसे चला सकता हूं और खिड़की को भी छिपा सकता हूं क्योंकि मीट यूज़ शेलएक्सेक्यूट को सेट करता है और यूजर नेम और पासवर्ड की तुलना में उस विंडो को छुपाता है। मैं जो कुछ भी इकट्ठा कर सकता हूं वह है कि जब आप UseShellExecute झूठ सेट करते हैं, तो कोड विंडो को छिपा नहीं करता है। नीचे मेरा कोड उदाहरण देखें और वास्तव में अगर कोई मुझे दिखा सकता है कि कैसे व्यवस्थापक के साथ प्रक्रिया शुरू करने के लिए सही है और खिड़की छिपा रखा है शुक्रवार, 27 अगस्त, 2010 2:19 PM आपकी पोस्ट के लिए धन्यवाद सिर्फ एक त्वरित प्रतिबिंब, एक वैकल्पिक चरण चरण 1 कोड के रूप में कैसे 2-कदम लॉन्च करने की प्रक्रिया बनायी जा सकती है: रनस क्रिया का उपयोग करने के लिए UserShellExecute false सेट करें। चरण 2 कोड: विंडो को छुपाने के लिए UserShellExecute सत्य सेट करें। यह समाधान दोनों कंसोल और विंडो अनुप्रयोगों के लिए काम करता है। निम्न जानकारी UseShellExecute के बीच संबंध को समझने में आपकी मदद करेगी बनाएँनौविंडो उपयोगकर्ता नाम पासवर्ड और विंडोस्टाइल सेटिंग्स 1. यहां के अनुसार quot यदि उपयोगकर्ता नाम और पासवर्ड गुण रिक्त नहीं हैं, तो CreateNoWindow संपत्ति मान को नजरअंदाज किया जाता है और एक नई विंडो को बनाया जाता है। 2. यहां के अनुसार quotShellExecute को गलत होना चाहिए यदि UserName संपत्ति रिक्त नहीं है या रिक्त स्ट्रिंग नहीं है, या एक InvalidOperationException फेंक दिया जाएगा जब Process. Start (ProcessStartInfo) को quot 3. यदि हम शेल के माध्यम से प्रोसेस लॉन्च करने के लिए यूज़शेलएक्सेक्यूट सही सेट करते हैं, तो वह शेल है जो कि प्रक्रिया को कैसे लॉन्च करेगा, तय करेगा, CreateNoWindow ध्वज का कोई प्रभाव नहीं होगा। 4. यदि हम UseShellExecute false सेट करते हैं WindowStyle संपत्ति का कोई प्रभाव नहीं होगा कुछ उपयोगी जानकारी कृपया सही उत्तर को सही समय पर निशान लगाएं। धन्यवाद, सैम SamAgain द्वारा संपादित सोमवार, 30 अगस्त, 2010 5:58 पूर्वाह्न ईटीएस द्वारा जवाब के रूप में चिन्हित किया गया, 31 अगस्त, 2010 8:18 पूर्वाह्न Ive का उपयोग करेंशेलएक्सएक्यूट फेल के साथ एक ही अनुभव था। क्या आपने StartInfo. CreateNoWindow सच का उपयोग करने की कोशिश की है I ve लोगों को यह कहते हुए पढ़ा है कि कन्सोल ऐप्स के लिए काम करता है, लेकिन अन्य एप्लिकेशन नहीं जो कि अपनी विंडो को खींचते हैं और पैरामीटर को अनदेखा करने के लिए कह रहे हैं (wwwframeworkdevnet-base-class-libraryhow-to-run - एक-प्रक्रिया में पृष्ठभूमि के बिना किसी भी-windows-10258.shtml)। मैं अनुमान लगा रहा हूं कि UseShellExecute को गलत तरीके से इनपुट और आउटपुट को आपकी प्रक्रिया में रीडायरेक्ट करने के लिए सेट करने के बाद, वे मानते हैं कि आप विंडो को छिपाना नहीं चाहते हैं, लेकिन मैं नहीं जानता यह एक दुर्दशा है शुक्रवार, 27 अगस्त 2010 6:23 PM आपके पोस्ट के लिए धन्यवाद सिर्फ एक त्वरित प्रतिबिंब, एक वैकल्पिक चरण चरण 1 कोड के रूप में कैसे 2-कदम लॉन्च करने की प्रक्रिया बनायी जा सकती है: रनस क्रिया का उपयोग करने के लिए UserShellExecute false सेट करें। चरण 2 कोड: विंडो को छुपाने के लिए UserShellExecute सत्य सेट करें। यह समाधान दोनों कंसोल और विंडो अनुप्रयोगों के लिए काम करता है। निम्न जानकारी UseShellExecute के बीच संबंध को समझने में आपकी मदद करेगी बनाएँनौविंडो उपयोगकर्ता नाम पासवर्ड और विंडोस्टाइल सेटिंग्स 1. यहां के अनुसार quot यदि उपयोगकर्ता नाम और पासवर्ड गुण रिक्त नहीं हैं, तो CreateNoWindow संपत्ति मान को नजरअंदाज किया जाता है और एक नई विंडो को बनाया जाता है। 2. यहां के अनुसार quotShellExecute को गलत होना चाहिए यदि UserName संपत्ति रिक्त नहीं है या रिक्त स्ट्रिंग नहीं है, या एक InvalidOperationException फेंक दिया जाएगा जब Process. Start (ProcessStartInfo) को quot 3. यदि हम शेल के माध्यम से प्रोसेस लॉन्च करने के लिए यूज़शेलएक्सेक्यूट सही सेट करते हैं, तो वह शेल है जो कि प्रक्रिया को कैसे लॉन्च करेगा, तय करेगा, CreateNoWindow ध्वज का कोई प्रभाव नहीं होगा। 4. यदि हम UseShellExecute false सेट करते हैं WindowStyle संपत्ति का कोई प्रभाव नहीं होगा कुछ उपयोगी जानकारी कृपया सही उत्तर को सही समय पर निशान लगाएं। धन्यवाद, सैम SamAgain द्वारा संपादित सोमवार, 30 अगस्त, 2010 5:58 पूर्वाह्न ईटीएस मंगलवार, 31 अगस्त, 2010 8:18 पूर्वाह्न द्वारा जवाब के रूप में चिह्नित किया गया है। आंतरिक विवरण है कि UseShellExecute Win32 ShellExecuteEx API का उपयोग करता है (ज़ाहिर है), ताकि आप उसके लिए डॉक्स देख सकते हैं और देखें कि क्या चल रहा है। मूल रूप से इसकी रूप में आप exe डबल क्लिक करें इसलिए आपको नई प्रक्रिया में प्रतिलिपि प्राप्त विशेषाधिकार नहीं मिलेगा, और यदि आवश्यक हो तो यह एक ऊंचाई संवाद बढ़ाएगा। यदि UseShellExecute झूठ है, तो आपको Win32 CreateProcess API मिलता है, और वह वर्तमान प्रक्रिया विशेषाधिकारों का उत्तराधिकारी होगा एक नई प्रक्रिया को प्रारंभ करता है और इसका प्राथमिक थ्रेड दस्तावेज़ को उद्धृत करने के लिए नई प्रक्रिया कॉलिंग प्रक्रिया के सुरक्षा संदर्भ में चलती है। और इसलिए अलग-अलग व्यवहार का एक उदाहरण उद्धृत करने के लिए, केवल एक ऊंचाई संवाद नहीं दिखाएगा फिल विल्सन, बुधवार, 01 सितंबर, 2010 11:06 PM माइक्रोसॉफ्ट एमएसडीएन वेब साइट की आपकी राय को समझने के लिए एक ऑनलाइन सर्वेक्षण आयोजित कर रहा है। यदि आप भाग लेना चुनते हैं, तो ऑनलाइन सर्वेक्षण आपको प्रस्तुत किया जाएगा जब आप एमएसडीएन वेब साइट छोड़ देंगे। क्या आप भागीदारी करना चाहेंगे

No comments:

Post a Comment