रीडायरेक्ट स्टॉर्मररर इंतजार
मेरे पास ऐसी स्थिति है जहां मैं एक फ़ाइल निष्पादित करना चाहता हूं, और फिर निष्पादन योग्य फ़ाइल को निष्पादित करने के बाद हटा दें। मैं फ़ाइल को निष्पादित करने के लिए System. Diagnostics. Process. Start () का उपयोग करता हूं, और प्रक्रिया को पूरा करने के लिए प्रतीक्षा करने के लिए WaitForExit () का उपयोग करें। मैं तो फ़ाइल का उपयोग करें। निष्पादन योग्य फ़ाइल को हटाने के लिए हटाएं (फ़ाइल नाम) समस्या यह है कि कभी-कभी, फ़ाइल। डिलीट निम्न त्रुटि से असफल हो जायेगी: यह मुझे विश्वास करने की ओर जाता है कि, किसी भी तरह, प्रक्रिया अब भी ज़िंदा है और निष्पादन योग्य फ़ाइल लॉक कर रही है। WaitForExit () कॉल रिटर्न मुझे नेट पर अन्य धागे मिल चुके हैं जो एक ही व्यवहार का वर्णन करते हैं, लेकिन WaitForExit () के बाद नींद (एन) को रखने के सुझावों के अलावा, मुझे समस्या के उचित स्पष्टीकरण या समाधान के साथ निष्कर्ष नहीं मिला है। उदाहरण: यहां एक नमूना कार्यक्रम है जो मेरे लिए समस्या को पुन: उत्पन्न करता है मैंने दोनों विंडोज एक्सपी और विंडोज 7 पर परीक्षण किया है, और वे दोनों अंततः एक ही त्रुटि के साथ कुछ बिंदु पर विफल रहे हैं। यह भी ध्यान रखें कि ss. exe निष्पादन योग्य एक सादा सरल quot हैहेलो विश्वस्वाट कंसोल अनुप्रयोग है। और उत्पादन आमतौर पर कुछ दिखता है (दुर्घटना होने से पहले पुनरावृत्तियों की भिन्न मात्रा के साथ): ऐसा क्यों होता है पर कोई भी विचार, और यदि इस के लिए कुछ तय है (कोड में सोएं डाल करने के अलावा) शुक्रवार, जनवरी 08, 2018 3 : 40 बजे इसका कारण यह है कि हालांकि प्रक्रिया पूरी हो चुकी है, हालांकि इसे नष्ट करने के लिए OS के लिए कुछ मिलीसेकेंड लग सकते हैं। इसके बाद एक बहु-कार्य ओएस, एक ही समय में हर किसी की सेवा करने की कोशिश कर रहा है। दुर्भाग्य से, यह जानने का कोई तरीका नहीं है कि फाइल अब लॉक क्यों नहीं है (विशेष रूप से) जब आप WaitForExit, आप प्रक्रिया ऑब्जेक्ट पर एक लॉक ऑब्जेक्ट बना रहे हैं। लॉक जारी होने तक प्रक्रिया ऑब्जेक्ट को नष्ट नहीं किया जा सकता है और आप उस चीज़ पर इंतजार नहीं कर सकते हैं जो मौजूद नहीं है (चिकन और अंडा प्रकार का मुद्दा)। तो केवल एक उचित बात आप कर सकते हैं कोशिश कर रहा है, कुछ की तरह: शमूएल स्टानोएवेविक द्वारा जवाब के रूप में चिह्नित शुक्रवार, 08 जनवरी, 2018 4:20 PM Tergiver द्वारा संपादित शुक्रवार, 08 जनवरी, 2018 4:20 बुल बदल गया है, अनंत लूप शुक्रवार, शुक्रवार, 08 जनवरी 2018 4:15 PM माइक्रोसॉफ्ट एमएसडीएन वेब साइट की आपकी राय को समझने के लिए एक ऑनलाइन सर्वेक्षण आयोजित कर रहा है। यदि आप भाग लेना चुनते हैं, तो ऑनलाइन सर्वेक्षण आपको प्रस्तुत किया जाएगा जब आप एमएसडीएन वेब साइट छोड़ देंगे। क्या आप भाग लेना चाहते हैं एलेना: आपके उत्तर के लिए धन्यवाद। इस 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 को उत्तर दिया मैंने एक ऐसा वर्ग बनाने की कोशिश की जो आपकी समस्या को हल करेगी जो अकसरसोनस स्ट्रीम का उपयोग करते हुए मार्क बियरर्स, रोब, स्टीवज्यू उत्तर लेते हुए आपकी समस्या को हल करेंगे। ऐसा करने से मुझे एहसास हुआ कि एसिंक्रोनस प्रोसेस आउटपुट स्ट्रीम से संबंधित एक बग पढ़ा गया है। आप ऐसा नहीं कर सकते: आपको सिस्टम प्राप्त होगा। अज्ञातऑपरेशन अपवाद मानकऑटो को पुनः निर्देशित नहीं किया गया है या प्रक्रिया अभी तक शुरू नहीं हुई है। फिर आपको प्रक्रिया शुरू होने के बाद एसिंक्रोनस आउटपुट को पढ़ना होगा: ऐसा करने से, रेस की स्थिति बनाओ क्योंकि आउटपुट स्ट्रीम आपको एसिंक्रोनस में सेट करने से पहले डेटा प्राप्त कर सकता है: तब कुछ लोग कह सकते हैं कि आपको स्ट्रीम से पहले ही पढ़ना होगा इसे अतुल्यकालिक से सेट करें लेकिन यही समस्या तब होती है तुल्यकालिक पढ़ने के बीच एक दौड़ की स्थिति होगी और स्ट्रीम को अतुल्यकालिक मोड में सेट किया जाएगा। वास्तविक प्रक्रिया में एक प्रक्रिया के आउटपुट स्ट्रीम के सुरक्षित असिंक्रोनस पठन को प्राप्त करने का कोई तरीका नहीं है, प्रक्रिया और प्रक्रिया स्टार्टइन्फो तैयार की गई है। आप संभावित रूप से अतुल्यकालिक पठन का उपयोग कर रहे हैं जैसे आपके केस के लिए अन्य उपयोगकर्ताओं द्वारा सुझाई गई। लेकिन आपको पता होना चाहिए कि दौड़ की स्थिति के कारण आप कुछ जानकारी याद कर सकते हैं।
Comments
Post a Comment