Wednesday 14 March 2018

Useshellexecute waitforexit c #


एलीना: आपके उत्तर के लिए धन्यवाद। इस 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 को उत्तर दिया मैंने एक ऐसा वर्ग बनाने की कोशिश की जो आपकी समस्या को हल करेगी जो अकसरसोनस स्ट्रीम का उपयोग करते हुए मार्क बियरर्स, रोब, स्टीवज्यू उत्तर लेते हुए आपकी समस्या को हल करेंगे। ऐसा करने से मुझे एहसास हुआ कि एसिंक्रोनस प्रोसेस आउटपुट स्ट्रीम से संबंधित एक बग पढ़ा गया है। आप ऐसा नहीं कर सकते: आपको सिस्टम प्राप्त होगा। अज्ञातऑपरेशन अपवाद मानकऑटो को पुनः निर्देशित नहीं किया गया है या प्रक्रिया अभी तक शुरू नहीं हुई है। फिर आपको प्रक्रिया शुरू होने के बाद एसिंक्रोनस आउटपुट को पढ़ना होगा: ऐसा करने से, रेस की स्थिति बनाओ क्योंकि आउटपुट स्ट्रीम आपको एसिंक्रोनस में सेट करने से पहले डेटा प्राप्त कर सकता है: तब कुछ लोग कह सकते हैं कि आपको स्ट्रीम से पहले ही पढ़ना होगा इसे अतुल्यकालिक से सेट करें लेकिन यही समस्या तब होती है तुल्यकालिक पढ़ने के बीच एक दौड़ की स्थिति होगी और स्ट्रीम को अतुल्यकालिक मोड में सेट किया जाएगा। वास्तविक प्रक्रिया में एक प्रक्रिया के आउटपुट स्ट्रीम के सुरक्षित असिंक्रोनस पठन को प्राप्त करने का कोई तरीका नहीं है, प्रक्रिया और प्रक्रिया स्टार्टइन्फो तैयार की गई है। आप संभावित रूप से अतुल्यकालिक पठन का उपयोग कर रहे हैं जैसे आपके केस के लिए अन्य उपयोगकर्ताओं द्वारा सुझाई गई। लेकिन आपको पता होना चाहिए कि आप दौड़ की स्थिति के कारण कुछ जानकारी याद कर सकते हैं। ProcessStartInfo. RedirectStandardOutput संपत्ति जब एक प्रक्रिया अपनी मानक स्ट्रीम को पाठ लिखती है, तो वह पाठ आमतौर पर कंसोल पर प्रदर्शित होता है। मानकऑउटपुट स्ट्रीम को पुनर्निर्देशित करने के लिए रीडायरेक्ट मानकऑप्टपुट सेट करके, आप किसी प्रक्रिया के आउटपुट को हेरफेर या दबाने के लिए कर सकते हैं। उदाहरण के लिए, आप पाठ को फ़िल्टर कर सकते हैं, इसे अलग तरीके से स्वरूपित कर सकते हैं, या आउटपुट को कंसोल और एक नामित लॉग फ़ाइल दोनों में लिख सकते हैं। यदि आप TrueirectStandardOutput को true पर सेट करना चाहते हैं तो आपको UseShellExecute को गलत पर सेट करना होगा। अन्यथा, मानक आउटपुट स्ट्रीम से पढ़ना एक अपवाद फेंकता है पुनर्निर्देशित मानक आउटपुट स्ट्रीम को सिंक्रोनस या एसिंक्रोनस रूप से पढ़ा जा सकता है। पढ़ें जैसे तरीके पढ़ने के लिए लाइन। और ReadToEnd प्रक्रिया की आउटपुट स्ट्रीम पर तुल्यकालिक पढ़ने के कार्यों प्रदर्शन। ये सिंक्रोनस पठन ऑपरेशन तब तक पूरा नहीं करते जब तक कि संबद्ध प्रक्रिया उसके मानक आउटपुट स्ट्रीम पर लिखती नहीं है या स्ट्रीम को बंद कर देती है। इसके विपरीत, BeginOutputReadLine मानकऑटपुट स्ट्रीम पर अतुल्यकालिक पढ़ने वाले कार्यों को प्रारंभ करता है। यह विधि स्ट्रीम आउटपुट के लिए एक निर्दिष्ट ईवेंट हैंडलर (आउटपुटडेटा रिएक्वेइड देखें) को सक्षम करता है और तुरंत कॉलर को लौटता है, जो स्ट्रीम आउटपुट को ईवेंट हैंडलर पर निर्देशित करते हुए अन्य काम कर सकता है। एसिंक्रोनस आउटपुट पर प्रोसेसिंग करने वाला अनुप्रयोग आउटफूट बफर को प्लावित किया गया है यह सुनिश्चित करने के लिए WaitForExit विधि को कॉल करना चाहिए। सिंक्रोनस पठन संचालन मानक आउटपुट स्ट्रीम से कॉलर पढ़ने और उस स्ट्रीम को लिखने वाली बाल प्रक्रिया के बीच एक निर्भरता प्रस्तुत करती है। ये निर्भरताएं गतिरोध की स्थिति पैदा कर सकती हैं जब कॉलर बाल प्रक्रिया की रीडायरेक्ट स्ट्रीम से पढ़ता है, तो यह बच्चे पर निर्भर होता है। कॉलर पढ़ने के कार्य के लिए इंतजार करता है जब तक कि बच्चे स्ट्रीम में लिखते हैं या धारा बंद कर देते हैं। जब बच्चा प्रक्रिया अपनी रीडायरेक्ट स्ट्रीम को भरने के लिए पर्याप्त डेटा लिखती है, तो यह माता-पिता पर निर्भर होता है। माता-पिता पूर्ण धारा से पढ़ते हैं या स्ट्रीम को बंद होने तक बच्चे की प्रक्रिया अगली लिखने के ऑपरेशन की प्रतीक्षा करता है। गतिरोध की स्थिति तब होती है जब कॉलर और बाल प्रक्रिया एक ऑपरेशन को पूरा करने के लिए एक दूसरे के लिए प्रतीक्षा करती है, और न ही जारी रख सकती है आप कॉलर और बाल प्रक्रिया के बीच निर्भरता का मूल्यांकन करके डेडलॉक से बच सकते हैं। उदाहरण के लिए, निम्न सी कोड दिखाता है कि रीडायरेक्ट स्ट्रीम से कैसे पढ़ा और बाल प्रक्रिया से बाहर निकलने की प्रतीक्षा करें कोड का उदाहरण p. StandardOutput. ReadToEnd को p. WaitForExit से पहले कॉल करके एक डेडलॉक स्थिति से बचा जाता है। एक गतिरोध की स्थिति का परिणाम हो सकता है यदि मूल प्रक्रिया p. StateOutput. ReadToEnd से पहले p. WaitForExit कॉल करता है और बाल प्रक्रिया रीडायरेक्ट स्ट्रीम को भरने के लिए पर्याप्त पाठ लिखती है। बच्चे की प्रक्रिया से निकलने के लिए मूल प्रक्रिया अनिश्चित काल तक इंतजार करेगी माता पिता के पूर्ण मानक आउटपुट स्ट्रीम से पढ़ने के लिए बच्चे की प्रक्रिया अनिश्चित काल तक इंतजार करेगी। जब आप मानक आउटपुट और मानक त्रुटि दोनों धाराओं से सभी पाठ पढ़ते हैं तो समान समस्या है। उदाहरण के लिए, निम्न सी कोड दोनों धाराओं पर पढ़ने का कार्य करता है। मानक आउटकूट स्ट्रीम पर एसिंक्रोनस पढ़ने वाले कार्यों को निष्पादित करके कोड उदाहरण डेडलॉक स्थिति से बचा जाता है। एक डेडलॉक हालत परिणाम अगर मूल प्रक्रिया कॉल p. StandardOutput. ReadToEnd p. StandardError. ReadToEnd द्वारा पीछा करता है और बाल प्रक्रिया अपनी त्रुटि स्ट्रीम को भरने के लिए पर्याप्त पाठ लिखता है। मूल प्रक्रिया को उसके मानक आउटपुट स्ट्रीम को बंद करने के लिए मूल प्रक्रिया के लिए अनिश्चित काल तक इंतजार करना होगा। माता पिता के पूर्ण मानक ईर्रर स्ट्रीम से पढ़ने के लिए बच्चे की प्रक्रिया अनिश्चित काल तक इंतजार करेगी। आप इन निर्भरताओं और उनकी गतिरोध क्षमता से बचने के लिए एसिंक्रोनस रीड ऑपरेशन्स का उपयोग कर सकते हैं। वैकल्पिक रूप से, आप दो थ्रेड बनाने और प्रत्येक स्ट्रीम के आउटपुट को अलग थ्रेड पर पढ़ने के द्वारा डेडलॉक की स्थिति से बच सकते हैं।

No comments:

Post a Comment