मैं प्रक्रिया का उपयोग करता हूं.एक बैच फ़ाइल शुरू करने के लिए प्रारंभ करें बैच फ़ाइल समानांतर में कई प्रोग्राम शुरू करने के लिए START कमांड का उपयोग करती है और फिर बाहर निकलती है। एक बार बैच फ़ाइल की प्रक्रिया हो जाती है। प्रक्रिया समाप्त हो जाती है और प्रक्रिया हो जाती है। एक्सेटकोड में सही निकास कोड होता है। लेकिन जब मैं प्रक्रिया को बुलाता हूं। वेटफॉरएक्सिट () यह कभी भी रिटर्न नहीं देता। कोड का निम्नलिखित भाग समस्या दर्शाता है यह एक बैच फ़ाइल बनाता है, इसे शुरू करता है और फिर प्रिंट करता है: इसे तब प्रिंट करना चाहिए: लेकिन यह कभी नहीं करता (भले ही हेटेक्ज़िटेड सत्य है और हमारे पास पहले से ही एक ExitCode है) मैंने देखा कि यह केवल तभी होता है जब बैच फ़ाइल START कमांड में होती है और जब मानक आउटपुट और मानक त्रुटि को रीडायरेक्ट किया जाता है। क्यों WaitForExit () कभी नहीं लौटा है इस प्रक्रिया से बाहर निकलने के लिए इंतजार करने का सही तरीका क्या है यह सिर्फ चुनाव प्रक्रिया के लिए सुरक्षित है। मैंने देखा है कि एक बड़ी समय समाप्ति के साथ प्रतीक्षाकर्ता (100000) को कॉल करना (जो निश्चित रूप से समाप्त नहीं होता है) प्रक्रिया पूरी होने पर तुरंत रिटर्न मिलता है अजीब। समयबाह्य बिना इसे लटका दिया। जब आप टाइम-आउट के बिना WaitForExit () को कॉल करते हैं, तो यह मूलभूत अंतर होता है, यह सुनिश्चित करता है कि पुनर्निर्देशित स्टडॉटर ने आईओएफ वापस कर दिया है। यह सुनिश्चित करता है कि आप प्रक्रिया द्वारा उत्पादित सभी आउटपुट को पढ़ते हैं। हम यह देख सकते हैं कि quotonOutputquot क्या करता है, लेकिन उच्च बाधाएं यह आपके कार्यक्रम को खारिज करती हैं क्योंकि यह मानते हुए कि आपका मुख्य थ्रेड बेकार है, जब यह वास्तव में WaitForExit () में फंस गया है। ndash हंस पासंत 3 नवम्बर 12:06 यह मानक ऑटपुट और स्टैंडर्ड एरर के ईवेंट-आधारित एसिंक्रोनस हैंडलिंग के विशिष्ट कार्यान्वयन में एक आर्टिफैक्ट (आईडी बग) लगता है। मैंने देखा है कि जब तक मैं आसानी से आपकी समस्या को पुन: उत्पन्न करने में सक्षम था, बस आपके द्वारा प्रदान किए गए कोड को चलाने के द्वारा (उत्कृष्ट कोड उदाहरण, जिस तरह से।)), प्रक्रिया वास्तव में अनिश्चित काल तक लटका नहीं आई थी दरअसल, बच्ची की दो प्रक्रियाओं को शुरू होने के बाद, यह प्रतीक्षाफॉरएक्सिट () से लौटा था खुद को बाहर निकल गया था। यह प्रक्रिया वर्ग के कार्यान्वयन का जानबूझकर भाग माना जाता है। विशेष रूप से, Process. WaitForExit () विधि में, प्रक्रिया समाप्त होने के बाद, प्रक्रिया को स्वयं ही संभाल कर लेता है, यह देखने के लिए जांचता है कि क्या स्टडआउट या स्टेडरर के लिए कोई पाठक बनाया गया है यदि ऐसा है, और यदि WaitForExit के लिए टाइमआउट मान ) कॉल अनंत है (यानी -1), वास्तव में पाठक के अंत के लिए इंतजार कर रहा है, पाठक (ओं) पर प्रत्येक संबंधित रीडर को केवल तब ही बनाया जाता है जब BeginOutputReadLine () या BeginErrorReadLine () विधि को कहा जाता है। Stdout और stderr धाराएं स्वयं तक बंद नहीं होती जब तक कि बाल प्रक्रियाओं को बंद नहीं किया जाता है। इसलिए उन धाराओं के अंत तक इंतजार करना बंद हो जाएगा, जब तक ऐसा नहीं होता। वह WaitForExit () को अलग तरीके से व्यवहार करना चाहिए, इसके आधार पर कि क्या किसी ने ऐसे तरीकों को बुलाया है जो धाराओं के ईवेंट-आधारित रीडिंग को शुरू करते हैं या नहीं, और विशेष रूप से उन धाराओं को सीधे पढ़ते हुए प्रतीक्षाफॉरएक्सिट () इस तरह से व्यवहार करने का कारण नहीं है, एपीआई में एक असंगति है जो इसे समझने और उपयोग करने में अधिक मुश्किल बनाता है। जबकि आईडी व्यक्तिगत रूप से इसे एक बग कहते हैं, मुझे लगता है कि यह संभव है कि प्रक्रिया वर्ग के क्रियान्वयनकर्ता इस असंगति से अवगत हैं और इसे उद्देश्य पर बनाया है। किसी भी स्थिति में, एपीआई के ईवेंट-आधारित भाग का उपयोग करने के बजाय कार्य-आसपास मानक-आउटपुट और मानक ईर्रर को सीधे पढ़ना होगा। (हालांकि जाहिर है, यदि उन कोडों पर इंतजार करना होता है, तो एक ही अवरुद्ध व्यवहार को तब तक देखेगा जब तक बच्चे की प्रक्रिया बंद नहीं हो जाती।) उदाहरण के लिए (सी, क्योंकि मुझे एफ़ अच्छी तरह से पता नहीं है कि इस तरह से एक उदाहरण उदाहरण के रूप में थप्पड़ मारना है :)): उम्मीद है कि उपर्युक्त कार्य-आस-पास या कुछ इसी तरह के मूल मुद्दे को संबोधित करेंगे जो आप में चलेंगे मेरे लिए धन्यवाद, नेल्स वोर्गार्ड क्राइस्टेनसेन ने मुझे प्रतीक्षाफॉरएक्सिट () विधि में समस्याग्रस्त लाइनों के निर्देशन करने के लिए धन्यवाद, ताकि मैं इस उत्तर को सुधार सकूं। एक कमांड लाइन से मैं सफलतापूर्वक एमएसबिल्ड चला सकता हूं: c: windowsmicrosoftframeworkv4.0.30319msbuild. exe helloworld. csproj t: Build जब मैं एसी प्रोग्राम से समतुल्य चलाता हूँ, प्रक्रिया वर्ग का उपयोग कर, msbuild कहता है कि ढांचा नहीं मिला है एक त्रुटि देता है त्रुटि SDKInstallRootv2.0 रजिस्ट्री कुंजी को सेट करने के लिए कहती है। Msbuild को c कोड स्ट्रिंग exePath system. IO. Pathbine (quot: windowsmicrosoftframeworkv4.0.30319quot, quotmsbuild. exequot) से चलाने के लिए कैसे करें प्रक्रिया नई प्रक्रिया पी तर्क quothelloworld. csproj टी: Buildquot p. StartInfo. Working डायरेक्टरी उद्धरण: msbuildhellowldquot p. StartInfo. RedirectStandardError सच p. StartInfo. RedirectStandardOutput सच p. StartInfo. UseShellExecute false p. Start () p. WaitForExit () स्ट्रिंग त्रुटियाँ p. StandardError. ReadToEnd () स्ट्रिंग आउटपुट p. StandardOutput. ReadToEnd () शुक्रवार, 04 फरवरी, 2011 3:40 PM आपकी पोस्ट के लिए धन्यवाद। ऐसा लगता है कि आपने SDKInstallRootv2.0 की रजिस्ट्री कुंजी को सेट नहीं किया है, तो आप यह जांचने का प्रयास कर सकते हैं कि क्या एक महत्वपूर्ण NamequotSDKInstallRootv2.0quot DataquotC के साथ है: WINDOWSMicrosoftFrameworkv2.0.50727quot निर्देशिका HKLMSoftwareMicrosoftFramework में हालांकि, यदि आप प्रोजेक्ट प्रोग्राम को बनाना चाहते हैं, तो मुझे लगता है कि बिल्डिंगइन के साथ ऐसा करना सबसे अच्छा तरीका है आप निम्न पोस्ट में कैओस कोड की कोशिश कर सकते हैं। आशा है कि मेरा जवाब मदद करता है फोरम में एमएसडीएन सब्सक्राइबर सपोर्ट यदि आपके पास हमारे समर्थन पर कोई प्रतिक्रिया है, तो कृपया हमसे संपर्क करें msdnmg microsoft ज़ीवेई चेन एमएसएफटीएस एमएसडीएन सामुदायिक सहायता हमें प्रतिक्रिया दें हमसे संपर्क करें या माइक्रोसॉफ्ट से कोड का नमूना प्राप्त करें कृपया उत्तर को उत्तर के रूप में चिह्नित करने के लिए याद रखें यदि वे मदद करते हैं और उन्हें अचिह्नित करते हैं तो कोई मदद नहीं प्रदान करें स्टीव रिचटर द्वारा जवाब के रूप में चिह्नित सोमवार, 07 फरवरी, 2011 3:15 अपराह्न सोमवार, 07 फरवरी, 2011 5:19 पूर्वाह्न
ला डायरेकिन डे ला एस्क्यूला डे सबोफिशिअल्स सर्गेन्टो इनोकेंसिओ चिंच, अब तक 12 अप्रैल के लिए अब तक 23 अप्रैल के लिए ऑरिएंटासिना मिलिटरी डे सबोफिशिअल्स डेल क्यूरो प्रशासक के लिए तैनात हैं। डेमोक्रेटिक डेल गोबिर्नो, डेमोक्रेटिक डेमोक्रेटिक डेमोक्रेटिक डिफेंसेना और पोलिटिका डेल्टा डेल्टा डेमोक्रेटिक पॉलिटेका के साथ मिलकर काम करने के लिए डेमोक्रेटिक फाउंडेशन के लिए महत्वपूर्ण योगदान दिया गया है, और एजुकेशनल नेसिअनल टेक्नोलॉजीज और टेक्निकल प्रोफेशनलों में शामिल हैं। पैरा सर्विसेडो, पेशेवरों के लिए पेशेवरों के लिए पेशेवरों की जरूरतों को पूरा करने के लिए एस्पेरेटर्स की डिग्री है, पेशेवरों के लिए एक विशेष परीक्षा और पूर्व छात्रों की फीस, एमडीआई और पीईसीलजीज शामिल हैं। पारा ला इंस्क्रिप्शन, डिप्लोमा डिप्लोमा के लिए डिप्लोमा और लॉटरी रिजर्व के बारे में सलाहकार के बारे में जानकारी प्राप्त करने के लिए, अपने बांगट और एस्कुएला डे लॉगस्टिका में कॉमांडोस डे ज़ोना ओ डिस्ट्रिट्स मिलिटेरेस के लिए । लॉस पासोस एक पेशेवर इंसान के रूप में पेशे से जुड़े पेशेवरों की तुलना में, पेशेवरों के बारे में बात करते हैं,...
Comments
Post a Comment