यह प्रश्न थोड़ा अजीब लग सकता है लेकिन मैं एक प्रक्रिया के माध्यम से वीएस 2005 को चलाने और एक विशिष्ट आदेश को निष्पादित करने का प्रयास कर रहा हूं और मैं waitforexit () मैं अपने इनपुट और आउटपुट को सफलतापूर्वक रीडायरेक्ट कर रहा हूं, लेकिन अब हर बार मुझे विंडो त्रुटि रिपोर्टिंग विंडो मेसेज प्राप्त करना है। समस्या यह है कि मैं रिमोटिंग कर रहा हूं, इसलिए जब यह संदेश विन्डो प्रक्रिया निष्पादन के दौरान होता है, तब तक मैं लटका लूँगा जब तक कि मैं अन्य (रिमोटिंग) मशीन में प्रवेश न करे और विंडो बंद कर दूंगा। क्या प्रोग्राम को इस विंडो को मारने या संभवतः संदेशवंड को अक्षम करने के लिए कोई रास्ता नहीं है, मैंने एक मूक निष्पादन में वीएस चलाने के बारे में सोचा है (मुझे अभी ऐसा करने का कोई रास्ता नहीं मिला है)। मैंने यह भी देखने का प्रयास किया है कि क्या ऐसा कुछ किया जा रहा है जब ऐसा तब होता है जब ऐसा नहीं होता है। गुरुवार, 25 अक्टूबर, 2007 8:32 PM अच्छा, मैंने SendWare के साथ FindWindow और FindWindowEx का उपयोग करने की कोशिश की लेकिन मुझे सही विंडो हैंडल नहीं मिल पाई। लेकिन जब से मुझे पता है कि एक Windows त्रुटि रिपोर्टिंग Msssage बॉक्स पॉप अप हो जाएगा, मैंने देखा है कि यह देखने के लिए कि क्या यह अपनी प्रक्रिया थी (और यह है)। प्रक्रिया dwwin. exe (डॉ। वाटसन विन) है और मुझे बस यही करना था कि मैं खुद को वर्तमान समस्या को ठीक करने की इजाजत देता हूं। WaitForExit () कथन के लिए नीचे दिए गए मौजूदा कोड ब्लॉक को स्थानापन्न करें जो मैंने पहले किया था। proc. WaitForExit (60000) एक मिनट प्रक्रिया ProcArray प्रक्रिया। GetProcessesByName (quotedwwinquot) foreach (प्रक्रिया प्रक्रिया ProcArray में पाया) मैं भी देखने के लिए जाँच की है कि आप प्रक्रिया प्राप्त करने में सक्षम थे। MainWindowTitle (), लेकिन यह quotquot पर सेट है तो यह एक हैक है और मैं वास्तव में इसका उपयोग करना पसंद नहीं करता, लेकिन यह वर्तमान निष्पादन के लिए काम करता है। सोमवार, 2 9, 2007 7:26 PM नहीं, मैं किसी समस्या के बिना इनपुट और आउटपुट को रीडायरेक्ट कर सकता हूँ। मैं जो त्रुटि प्राप्त कर रहा हूं वह सामान्य विंडोज त्रुटि रिपोर्टिंग है और दुर्भाग्य से, यह जापानी में है इसलिए मुझे नहीं पता कि सटीक त्रुटि क्या है, लेकिन यह सामान्य त्रुटि है मेरे पास मेरे सामने कोड नहीं है, लेकिन मैंने पूरी प्रक्रिया से बाहर निकलने के बाद त्रुटि और आउटपुट को रीडायरेक्ट करने के लिए मैंने प्रतिनिधि पाठ दिखाया। मैं कुछ भी नहीं कर सकता हूं और मैं अपने कंप्यूटर पर उसी प्रक्रिया को चलाने में सक्षम हूं, लेकिन मैं रिमोटिंग के माध्यम से यह एक विशेष आदेश नहीं कर पा रहा हूं। मैं कल काम पर एक गैर जापानी मशीन पर रिमोटिंग करने की कोशिश कर रहा हूं और मैं अपने निष्कर्षों को परवाह किए बिना पोस्ट कर दूंगा। शुक्रवार, 26 अक्टूबर, 2007 2:34 पूर्वाह्न आप कंसोल का उपयोग कर रहे हैं quotcmdquot यदि हां, तो आपको भी बाहर निकलना होगा। शुक्रवार, 26 अक्टूबर, 2007 4:50 पूर्वाह्न यदि आपको पता चलता है कि आपकी प्रक्रिया कितना समय ले जा रही है, तो आप बुल से बाहर निकलने वाली प्रक्रिया का उपयोग कर सकते हैं। वेटफॉरएक्सिट (टाइम इनमिली एसकंड्स) else प्रिंट त्रुटि संदेश यह हो सकता है कि आप क्या कर रहे हैं से संबंधित नहीं हो सकता है, लेकिन मेरे पास एक अनुभव था जहां प्रक्रिया से बाहर नहीं निकलेगा अगर मैं इसका आउटपुट पुनः निर्देशित करता हूं आउटपुट रीडायरेक्शन को निष्क्रिय करने का प्रयास करें और देखें कि क्या प्रक्रिया निकलती है। इसे एक प्रयास करें, यह काम कर सकता है शुक्रवार, 26 अक्टूबर, 2007 11:58 पूर्वाह्न मैं यह कोशिश करना चाहता हूं, लेकिन यह हैक की बहुत अधिक है। मेरे पास बहुत सी भिन्न कमांड हैं जो अलग-अलग समय (30 सेकंड से 25 मिनट) लेते हैं, इसलिए कोई वास्तविक समय सेटिंग नहीं है जो कि मैं अपने प्रदर्शन को नष्ट किए बिना रख सकता हूं यह कार्य पिछले 6 महीनों में कई आदेशों के लिए सही तरीके से काम कर रहा है और अब यह मुझ पर बाहर निकलने का फैसला करता है मैंने इसे एक अलग कंप्यूटर पर बिना किसी समस्या (जो वास्तव में मेरे साथ गड़बड़ कर रहा है) की कोशिश की है। मुझे पता है कि यह आउटपुटर का रीडायरेक्शन नहीं है क्योंकि एक नए विंडों को सर्वर पर बनाया जा रहा है जिसे मैं रिमोट कर रहा हूं। जैसे ही मैं उस विंडो को बंद करता हूं, मेरी प्रक्रिया अपेक्षा से बाहर निकलती है और यूज़र साइड पर सही आउटपुट प्रदर्शित होता है। आपकी मदद के लिए धन्यवाद, लेकिन मैं इस समस्या से वास्तव में निराश हो रहा हूं। शुक्रवार, 26 अक्टूबर, 2007 3:01 PM संदेश के विस्तार के बारे में जानने के बिना ही समस्या पर अनुमान लगाना था। क्या आपने 3.5 बीटा या विजुअल स्टूडियो 2008 बीटा को बिल्कुल भी स्थापित किया है, आप प्रोग्राम, प्रक्रिया। स्टार्ट (quotfile. exequot) को शुरू करने के लिए प्रक्रिया का उपयोग कैसे कर रहे हैं, या क्या आप ProcessStartInfo का उपयोग कर रहे हैं शुक्रवार, 26 अक्टूबर, 2007 3:21 PM नहीं, मेरे पास है 2003 और 2005 स्थापित proc नई प्रक्रिया () procsi new processstartInfo () मैं तो मानक ईर्रर और मानक औटपुट दोनों के लिए एक नया धागा सेटअप करता हूं तो मैं अपनी आज्ञाओं को लिखता हूं और यदि (मानक रीडायरेक्ट) बाहर यदि मानक त्रुटि को पुनर्निर्देशित करना त्रुटि Proc. WaitForExit () लेफ्टिनेंट -------- यह वह जगह है जहां सामान्य Windows त्रुटि रिपोर्टिंग विंडो होती है। मैंने अनुवाद किया है कि खिड़की से जो हो सकता है, वह ऊपर आ गया। माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2005 क्योंकि समस्या आती है, यह माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2005 समाप्त हो जाती है। हम असुविधा को लागू करते हैं, इसमें कोई बहाना नहीं है। आपके सभी समय के लिए फिर से धन्यवाद मैंने प्रोजेक्ट ऑब्जेक्ट को बनाने के लिए StreamWriter sIn बनाया है मैं फिर proc. start () कमांड के बाद इनपुट को रीडायरेक्ट करता हूं, तो मैं इसके बावजूद कैसे न रखता हूं, मैं बदलाव को एसआई में जा सकता हूं। Close () WaitForExit कॉल के बाद यह देखने के लिए कि क्या यह कोई परिवर्तन करता है या नहीं। प्रोक एक प्रकार था, यह प्रक्रिया होना चाहिए था दोबारा, यह एक त्रुटि संदेश नहीं है, इसलिए कोई स्टैक ट्रेस नहीं है मेरा मानक त्रुटि रीडायरेक्शन रिक्त है और मानक आउटपुट रीडायरेक्शन में मुझे क्या उम्मीद है, लेकिन कोई त्रुटि संकेत नहीं हुई। यही कारण है कि मैं विंडोज त्रुटि रिपोर्टिंग विंडो को बंद करने के बाद सब कुछ अभी भी काम करता है। मैं बाद में क्या होता है जब मैं प्रतीक्षा करेंफ़ोयरएक्सिट () लाइन के नीचे sIn. Close () रेखा को स्थानांतरित करने के बाद क्या होता है। शुक्रवार, 26 अक्टूबर, 2007 4:59 अपराह्न पीटर रिची ने लिखा: यदि आप पुनर्रचना कर रहे हैं तो आवेदन समाप्त हो जाने तक आप एसएएन ऑब्जेक्ट को बंद करना चाहते हैं। किसी को उन सभी धाराओं को बंद नहीं करना चाहिए। प्रोसेस ऑब्जेक्ट उन के मालिक हैं और यह स्वयं के बाद सफाई के लिए जिम्मेदार है। एक सबसे अच्छा कॉल प्रक्रिया पर होना चाहिए। प्रक्रिया वस्तु के साथ समाप्त होने के बाद () आपको निश्चित रूप से (i. e. इसके बेमानी) की आवश्यकता नहीं है, लेकिन प्रक्रिया समाप्त होने के बाद इसे समस्या का कारण नहीं होना चाहिए। प्रक्रिया। बंद मानकिनपुट और मानकआउटपुट (और मानक आतंक) नदियों को बंद करने की अनुशंसित विधि है। शुक्रवार, 26 अक्टूबर, 2007 5:03 अपराह्न अगर मुझे पता है कि विस्थापन विधि ने बंद नहीं किया है, तो कम से कम अपने ऑपरेशन के हिस्से के रूप में मुझे आश्चर्य होगा। मैं इस तथ्य का उपयोग करने के पक्ष में हूं कि जब प्रक्रिया लागू हो जाती है (अप्रत्यक्ष रूप से उस घटक का विस्तार करने के माध्यम से जो इसे लागू करता है), तो उसे निकालना चाहिए और इसे उचित सफाई के लिए दें मैं प्रक्रिया शुरू करने की सिफारिश नहीं करता। इसके बजाय, और इसके अलावा, प्रक्रिया के अलावा बंद करो। हाँ, कॉल निपटाना बंद करें मेरी पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, मेरा दूसरा फोन बंद करना है जब आप जानते हैं कि आप इसके साथ कब करते हैं आईडीसीपोज़ाबल होने के बावजूद एक क्लोज़क्वाट विधि को लागू करने वाले ऑब्जेक्ट्स में, क्वालिटी क्लोज़ॉट विधि का उपयोग करने के लिए इसका अधिक स्पष्ट होना प्लस उपयोग ब्लॉक के उपयोग के बिना आपके पास वेरिएबल को स्कॉप करने का कोई तरीका नहीं है और डिस्झ के लिए कॉल - ऑब्जेक्ट का इस्तेमाल डिस्पास्पिल के कॉल के बाद किया जा सकता है। अगर आप बंद करें, आपके सभी प्रबंधित संसाधनों का निपटान करते हैं, लेकिन ऑब्जेक्ट का उपयोग अभी भी किया जा सकता है (यानी यह quotedizedquot के रूप में ध्वजांकित नहीं किया गया है) और आप इसे एक नई प्रक्रिया ऑब्जेक्ट को आवंटित किए बिना अन्य एप्लिकेशन को चलाने के लिए उपयोग कर सकते हैं - जो अन्यथा ObjectDisposedException )। शुक्रवार, 26 अक्टूबर, 2007 6:09 अपराह्न यदि पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, तो अगला सबसे अच्छा निपटान को कॉल करना होगा। नहीं बंद, जब, जैसा कि आपने कहा था, आप जानते हैं कि आप वस्तु के साथ किया कुछ ऐसी चीज़ों को बंद करने के द्वारा कॉल करने से, जो आईडीिसपोजेबल लागू करता है, डेवलपर संभावित रूप से एक गलती कर रहा है। यदि कुछ अतिरिक्त क्लीनअप को केवल बंद करने के लिए सौंपने के अलावा, तो प्रोग्रामर खुद बग के लिए बॉल बंद करके खुद को स्थापित कर रहा है। कॉल करने के लिए एक मामला हो सकता है, लेकिन केवल तभी यदि आप ऑब्जेक्ट के साथ नहीं किया है, जैसा कि आप अपने आखिरी उत्तर के नीचे इंगित करते हैं। लेकिन जब इसके साथ किया जाता है, तो डिस्पोजेबल कॉल करें। शुक्रवार, 26 अक्टूबर, 2007 6:20 अपराह्न यदि पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, तो अगला सबसे अच्छा निपटान को कॉल करना होगा। नहीं बंद, जब, जैसा कि आपने कहा था, आप जानते हैं कि आप वस्तु के साथ किया कुछ ऐसी चीज़ों को बंद करने के द्वारा कॉल करने से, जो आईडीिसपोजेबल लागू करता है, डेवलपर संभावित रूप से एक गलती कर रहा है। यदि कुछ अतिरिक्त क्लीनअप को केवल बंद करने के लिए सौंपने के अलावा, तो प्रोग्रामर खुद बग के लिए बॉल बंद करके खुद को स्थापित कर रहा है। कॉल करने के लिए एक मामला हो सकता है, लेकिन केवल तभी यदि आप ऑब्जेक्ट के साथ नहीं किया है, जैसा कि आप अपने अंतिम उत्तर के निचले भाग में दर्शाए थे। लेकिन जब इसके साथ किया जाता है, तो डिस्पोजेबल कॉल करें। वास्तव में, इसके बराबर: DisposableClass obj new DisposableClass () IDisposable डिस्पोजेबल obj के रूप में IDisposable अगर (डिस्पोजेबल नल) लेकिन हाँ, यह मानता है कि एक प्रयोग करने वाला कथन उद्धृत रूप से बराबर के बराबर है, लेकिन मैं स्पष्ट रूप से एक क्लॉजक्वाट विधि की उपस्थिति में विवाद को कॉल नहीं करना चाहिए डिस्पोजेज़ कॉल के साथ कमी की वजह से पहली पसंद हो उदाहरण के लिए, निम्नलिखित: प्रक्रिया की प्रक्रिया नई प्रक्रिया ()) मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे के लिए दौड़ा था और कभी भी यह ब्रेकपॉइंट नहीं था कि यह मेरे 10 मिनट के भीतर से शुरू होना चाहिए ग्राहक। मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर चुका हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। शुक्रवार, 26 अक्टूबर, 2007 7:19 अपराह्न एंथोनी मैमोन ने लिखा: मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे के लिए दौड़ा था और कभी भी यह ब्रेकपॉइंट नहीं था कि मुझे अपने ग्राहक की शुरुआत के 10 मिनट के अंदर ही मारा जाना चाहिए था । मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर चुका हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। जब आपको त्रुटि मिलती है (जैसे कॉल स्टैक) अपवाद विवरण देखने में सहायक होगा। आप मानक इनपुट और मानक आउटपुट का उपयोग कैसे कर रहे हैं आप किसी भी रीडलाइन तरीके का उपयोग कर रहे हैं पीटर, मेरा कहना है: यदि आप किसी ऑब्जेक्ट को डिस्पोज़ेट करते हैं जो कि (प्रत्यक्ष या अप्रत्यक्ष रूप से) IDisposable लागू करता है, तो आप केवल एक बग के लिए पूछ रहे हैं मैं बिना इस पर बहस करना चाहता हूं। आप जिस तरह से करते हैं, आप इसे जारी रख सकते हैं, और मेरे साथ रहना। जब तक हम प्रत्येक दूसरे कोड को बनाए रखने नहीं करते हैं, ठीक है। और वैसे, एक कोठरियों का ब्लॉक आपकी रक्षा नहीं करता है ब्लॉक से बाहर चर को घोषित करने से आपको कुछ भी नहीं रोकता है (यदि मुझे सही याद है), तो ब्लॉक समाप्त होने के बाद भी यह दायरे में हो सकता है। आपको सही कोड लिखने में मेहनती होनी चाहिए। यदि आप इसे quotatingquot बयान में घोषित करते हैं, तो एक तरीका है। लेकिन ट्रिनफिनली दृष्टिकोण का उपयोग करने को खारिज करने के लिए, क्योंकि यह गुंजाइश में छोड़ता है, वास्तव में यह मुद्दा नहीं है। यह अभी भी निपटान () डी कहीं की जरूरत है शुक्रवार, 26 अक्टूबर 2007 7:34 PM पीटर रिची ने लिखा है: एंथोनी मैमोन ने लिखा: मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे तक दौड़ गया था और कभी भी ऐसा ब्रेकपॉइंट नहीं था, जिसे 10 मिनट के भीतर मारा जाना चाहिए था मुझे अपने ग्राहक की शुरुआत मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर सकता हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। जब आपको त्रुटि मिलती है (जैसे कॉल स्टैक) अपवाद विवरण देखने में सहायक होगा। आप मानक इनपुट और मानक आउटपुट का प्रयोग कैसे कर रहे हैं क्या आप किसी भी रीडलाइन तरीके का उपयोग कर रहे हैं, यह एक अपवाद नहीं है जो फेंका जा रहा है, इसलिए मुझे कोई अपवाद विवरण नहीं दिखाई दे रहा है। मैं सीधे अपने कोड में कैच ब्लॉक में नहीं जाता हूं, मैं सीधे WaitForExit () कॉल के बाद फिर से शुरू करता हूं। जिस विंडो को मैं प्राप्त कर रहा हूं वह वही है जिसे आप प्राप्त करते हैं जब कोई माइक्रोसॉफ्ट उत्पाद अप्रत्याशित रूप से बंद हो जाता है और एमएस क्रैश के बारे में जानकारी चाहता है तो फिर, कोई अपवाद विवरण नहीं है। हालांकि सिस्टम लॉग्स में से एक में, मैं एक मेसेज (जापानी से अनुवादित) प्राप्त कर रहा हूं। QuotDevenv. exe एप्लिकेशन एरोस उत्पन्न होता है, त्रुटियों के 8.0.50727.762 संस्करण msvcr80.dll मॉड्यूल, संस्करण 8.0.50727.762, त्रुटि हुई पता 0x00039001 अधिक जानकारी के लिए, Helo और सहायता केंद्र पर जाएँ। माइक्रोसॉफ्टफ़्लैक्सएवंट्स. एपी कृपया देखें.मैं अलग-अलग आज्ञाओं में पारित करने के लिए मानक इनपुट को पुन: निर्देशित कर रहा हूँ क्योंकि मुझे उन्हें काम करने के लिए परेशानी हो रही थी कि मैं कैसे StartInfo का निर्माण करना चाहता था मैं आउटपुट और त्रुटि धाराओं को पुन: निर्देशित कर रहा हूं ताकि यह जांच सके कि प्रक्रिया के बाद से उनके पास क्या है। यह मुझे किसी चीज की जांच करने की इजाजत देगी जो मैं एक बार समाप्त हो जाने के बाद या तो स्ट्रीम में चाहूंगा। मैं किसी भी आउटपुट या त्रुटि रीडायरेक्शन धागे को भी शामिल नहीं होने की प्रक्रिया के बाद WaitForExit कॉल पास कर दिया है। मैं पूरी तरह से स्टम्प्ड हूं शुक्रवार, 26 अक्टूबर, 2007 7:53 PM पीटर, मेरा कहना है: यदि आप किसी ऑब्जेक्ट को डिस्पोजेज ऑब्जेक्ट न करें (सीधे या अप्रत्यक्ष रूप से) IDisposable, तो आप बस एक बग के लिए पूछ रहे हैं मैं बिना इस पर बहस करना चाहता हूं। आप जिस तरह से करते हैं, आप इसे जारी रख सकते हैं, और मेरे साथ रहना। जब तक हम प्रत्येक दूसरे कोड को बनाए रखने नहीं करते हैं, ठीक है। मैं सहमत नहीं हूँ। डिस्पोजेबल कॉल नहीं करने के लिए यह कोई उद्धरण नहीं है। आपके संसाधन तुरंत मुक्त हो जाते हैं, लेकिन जीसी यदि उन्हें स्मृति की जरूरत होती है तो (उन्हें निपटाने के पैटर्न ठीक से लागू किया जाता है और अंतिम रूप से मौजूद है) उन्हें छोड़ दिया जाएगा। यदि आप उपयोग कर रहे वर्ग को एक क्लॉक्स्क्वाट विधि लागू करता है जो सभी समान चीजें जो कि 'डिस्पोज़क्वाट' कहते हैं, बंद करें को या तो दस्तावेज के रूप में या क्लास में एक बग दर्ज करना चाहिए। Ive कभी एक ढांचे वर्ग का सामना नहीं किया जो IDisposable और एक क्लोज़ () विधि लागू करता है जो एक quotleququot प्रस्तुत किया था जब क्लोज़ को कॉल किए बिना बुलाया गया था DisposeClose के लिए भारी पैटर्न यह है कि कॉल्स को निपटाएं और साथ ही एक उद्धरणविरोधी ध्वज सेट करना (ऑब्जेक्ट डिस्पाइज्ड एक्सपेशेशन फेंकने के लिए उपयोग किया गया) वास्तव में यह फ़्रेमवर्क सामान्य संदर्भ में विस्तृत है: एक विशेष रूप से एक डोमेन-विशिष्ट नाम डिस्पोज़ से उचित है। उदाहरण के लिए, एक फाइल एनकॉप्शन हो सकता है, विधि नाम बंद करें का उपयोग करना। इस स्थिति में, निजी तौर पर निपटाना लागू करें और एक सार्वजनिक बंद करें विधि को कॉल करें जो कि कॉल डिस्पाज करें। निम्न कोड का उदाहरण इस पैटर्न को दिखाता है। आप अपने domain. quot के लिए उपयुक्त एक विधि नाम के साथ बंद कर सकते हैं कार्यान्वित करने से अंतिम रूप से निष्पादित और अप्रबंधित संसाधनों को साफ करने के साथ-साथ वस्तुओं के कुछ वर्गों जैसे कि फाइलों या डेटाबेस कनेक्शन ऑब्जेक्ट्स के लिए, क्लोज़ विधि बेहतर तरीके से तार्किक संचालन का प्रतिनिधित्व करता है ऑब्जेक्ट उपभोक्ता को ऑब्जेक्ट के साथ पूरा किया जाना चाहिए। प्रबंधित कोड निष्पादन में सुधार करने से (हालांकि यह भी उल्लेख किया गया है कि अच्छी तरह से लिखित मामलों में, दोनों कार्यात्मक रूप से समतुल्य हैं।) इसका मतलब यह है कि बंद का उपयोग करने वाले कोटेटर के साथ अधिक स्पष्ट है। और वैसे, एक कोठरियों का ब्लॉक आपकी रक्षा नहीं करता है ब्लॉक से बाहर चर को घोषित करने से आपको कुछ भी नहीं रोकता है (यदि मुझे सही याद है), तो ब्लॉक समाप्त होने के बाद भी यह दायरे में हो सकता है। आपको सही कोड लिखने में मेहनती होनी चाहिए। यदि आप इसे quotatingquot बयान में घोषित करते हैं, तो एक तरीका है। लेकिन ट्रिनफिनली दृष्टिकोण का उपयोग करने को खारिज करने के लिए, क्योंकि यह गुंजाइश में छोड़ता है, वास्तव में यह मुद्दा नहीं है। यह अभी भी निपटान () डी कहीं की जरूरत है हां, सभी प्रकार के तरीकों से आप अपने आप को पैर में गोली मार सकते हैं, लेकिन वह बात नहीं है जो हम चर्चा कर रहे थे। मैं व्यक्तिगत रूप से उस कोड की समीक्षा करेगा जो मैंने इस तरह की समीक्षा की थी। यह मेरी अनुशंसित सूची पर नहीं होगी। शुक्रवार, 26 अक्टूबर, 2007 7:54 PM फिर, यह एक अपवाद नहीं है जो फेंका जा रहा है, इसलिए मुझे कोई अपवाद विवरण नहीं मिल रहा है। मैं सीधे अपने कोड में कैच ब्लॉक में नहीं जाता हूं, मैं सीधे WaitForExit () कॉल के बाद फिर से शुरू करता हूं। जिस विंडो को मैं प्राप्त कर रहा हूं वह वही है जिसे आप प्राप्त करते हैं जब कोई माइक्रोसॉफ्ट उत्पाद अप्रत्याशित रूप से बंद हो जाता है और एमएस क्रैश के बारे में जानकारी चाहता है तो फिर, कोई अपवाद विवरण नहीं है। हालांकि सिस्टम लॉग्स में से एक में, मैं एक मेसेज (जापानी से अनुवादित) प्राप्त कर रहा हूं। QuotDevenv. exe एप्लिकेशन एरोस उत्पन्न होता है, त्रुटियों के 8.0.50727.762 संस्करण msvcr80.dll मॉड्यूल, संस्करण 8.0.50727.762, त्रुटि हुई पता 0x00039001 अधिक जानकारी के लिए, Helo और सहायता केंद्र पर जाएँ। माइक्रोसॉफ्टफ़्लैक्सएवंट्सएप। कृपया मुझे आपका मान लिया गया कि आपका एप्लिकेशन संदेश पैदा कर रहा था (इस मामले में आपको हमेशा अपवाद और स्टैक ट्रेस प्राप्त करना चाहिए) यह स्पष्ट नहीं था कि आप कॉल के बाद फिर से शुरू करते हैं WaitForExit () में यह मेरे लिए ऐसा लगता है जैसे आप चल रहे आवेदन को असामान्य रूप से समाप्त कर रहे हैं क्या आप devenv. exe चला रहे हैं I सुनिश्चित नहीं है कि आप किसी अन्य अनुप्रयोग को असामान्य रूप से समाप्त करने से रोकने के लिए अपने आवेदन में क्या कर सकते हैं एंथनी मैमोन ने लिखा: मैं विभिन्न आदेशों में पारित करने के लिए मानक इनपुट को पुन: निर्देशित कर रहा हूं क्योंकि मुझे उन्हें काम करने के लिए परेशानी हो रही थी जिस तरह से मैं StartInfo का निर्माण करना चाहता था मैं आउटपुट और त्रुटि धाराओं को पुन: निर्देशित कर रहा हूं ताकि यह जांच सके कि प्रक्रिया के बाद से उनके पास क्या है। यह मुझे किसी चीज की जांच करने की इजाजत देगी जो मैं एक बार समाप्त हो जाने के बाद या तो स्ट्रीम में चाहूंगा। मैं किसी भी आउटपुट या त्रुटि रीडायरेक्शन धागे को भी शामिल नहीं होने की प्रक्रिया के बाद WaitForExit कॉल पास कर दिया है। मैं पूरी तरह से स्टम्प्ड हूं आप एक डेडलॉक प्राप्त कर सकते हैं यदि आप पढ़ना और एप्लिकेशन मानक आउटपुट को ब्लॉक करते हैं - जो कि आपने स्ट्रीम को बंद कर दिया था, तो मुझे विश्वास है। मैं केवल एक चीज के बारे में सोच सकता हूँ जो एक ऐसा अनुप्रयोग बना रहा है जो सर्वर पर चल रहा है और खिड़कियां मॉनिटर करने वाली प्रक्रियाओं का निर्माण करती है जो आप दूरस्थ रूप से नियंत्रित कर रहे हैं और फिर सही बटन ढूंढ सकते हैं और उन्हें प्रोग्राम को दबाकर संवाद विंडो के संदेश पंप को एक संदेश भेजते हैं । यह अराजकता, शब्द और अन्य अनुप्रयोगों के साथ होता है जिनका उपयोग ऑटोमेटेशन के साथ किया जा सकता है MSFT ने इन अनुप्रयोगों को उपयोगकर्ता इंटरैक्शन के बिना चलाने के लिए डिज़ाइन नहीं किया था, इसलिए एक बार जब आप त्रुटियों पर खिड़कियां प्राप्त करेंगे क्या आपने एमएसबुइड का उपयोग करने पर विचार किया है जो बैच के निर्माण के लिए अधिक अनुकूल है, ऐसा भी लगता है कि टीएफएस 2008 का निर्माण सर्वर बनाने में आसान होगा शनिवार, 27 अक्तूबर, 2007 11:07 पूर्वाह्न, मैंने FindWindow और FindWindowEx को SendMessage के साथ प्रयोग करने का प्रयास किया लेकिन मुझे सही विंडो हैंडल नहीं मिल पाई। लेकिन जब से मुझे पता है कि एक Windows त्रुटि रिपोर्टिंग Msssage बॉक्स पॉप अप हो जाएगा, मैंने देखा है कि यह देखने के लिए कि क्या यह अपनी प्रक्रिया थी (और यह है)। प्रक्रिया dwwin. exe (डॉ। वाटसन विन) है और मुझे बस यही करना था कि मैं खुद को वर्तमान समस्या को ठीक करने की इजाजत देता हूं। WaitForExit () कथन के लिए नीचे दिए गए मौजूदा कोड ब्लॉक को स्थानापन्न करें जो मैंने पहले किया था। proc. WaitForExit (60000) एक मिनट प्रक्रिया ProcArray प्रक्रिया। GetProcessesByName (quotedwwinquot) foreach (प्रक्रिया प्रक्रिया ProcArray में पाया) मैं भी देखने के लिए जाँच की है कि आप प्रक्रिया प्राप्त करने में सक्षम थे। MainWindowTitle (), लेकिन यह quotquot पर सेट है तो यह एक हैक है और मैं वास्तव में इसका उपयोग करना पसंद नहीं करता, लेकिन यह वर्तमान निष्पादन के लिए काम करता है। सोमवार, 2 9, 2007 7:26 पूर्वाह्न यह प्रश्न थोड़ा अजीब लग सकता है लेकिन मैं एक प्रक्रिया के माध्यम से वीएस 2005 को चलाने और एक विशिष्ट आदेश निष्पादित करने का प्रयास कर रहा हूं और मैं waitforexit () मैं अपने इनपुट और आउटपुट को सफलतापूर्वक रीडायरेक्ट कर रहा हूं, लेकिन अब हर बार मुझे विंडो त्रुटि रिपोर्टिंग विंडो मेसेज प्राप्त करना है। समस्या यह है कि मैं रिमोटिंग कर रहा हूं, इसलिए जब यह संदेश विन्डो प्रक्रिया निष्पादन के दौरान होता है, तब तक मैं लटका लूँगा जब तक कि मैं अन्य (रिमोटिंग) मशीन में प्रवेश न करे और विंडो बंद कर दूंगा। क्या प्रोग्राम को इस विंडो को मारने या संभवतः संदेशवंड को अक्षम करने के लिए कोई रास्ता नहीं है, मैंने एक मूक निष्पादन में वीएस चलाने के बारे में सोचा है (मुझे अभी ऐसा करने का कोई रास्ता नहीं मिला है)। मैंने यह भी देखने का प्रयास किया है कि क्या ऐसा कुछ किया जा रहा है जब ऐसा तब होता है जब ऐसा नहीं होता है। गुरुवार, 25 अक्टूबर, 2007 8:32 PM अच्छा, मैंने SendWare के साथ FindWindow और FindWindowEx का उपयोग करने की कोशिश की लेकिन मुझे सही विंडो हैंडल नहीं मिल पाई। लेकिन जब से मुझे पता है कि एक Windows त्रुटि रिपोर्टिंग Msssage बॉक्स पॉप अप हो जाएगा, मैंने देखा है कि यह देखने के लिए कि क्या यह अपनी प्रक्रिया थी (और यह है)। प्रक्रिया dwwin. exe (डॉ। वाटसन विन) है और मुझे बस यही करना था कि मैं खुद को वर्तमान समस्या को ठीक करने की इजाजत देता हूं। WaitForExit () कथन के लिए नीचे दिए गए मौजूदा कोड ब्लॉक को स्थानापन्न करें जो मैंने पहले किया था। proc. WaitForExit (60000) एक मिनट प्रक्रिया ProcArray प्रक्रिया। GetProcessesByName (quotedwwinquot) foreach (प्रक्रिया प्रक्रिया ProcArray में पाया) मैं भी देखने के लिए जाँच की है कि आप प्रक्रिया प्राप्त करने में सक्षम थे। MainWindowTitle (), लेकिन यह quotquot पर सेट है तो यह एक हैक है और मैं वास्तव में इसका उपयोग करना पसंद नहीं करता, लेकिन यह वर्तमान निष्पादन के लिए काम करता है। सोमवार, 2 9, 2007 7:26 PM नहीं, मैं किसी समस्या के बिना इनपुट और आउटपुट को रीडायरेक्ट कर सकता हूँ। मैं जो त्रुटि प्राप्त कर रहा हूं वह सामान्य विंडोज त्रुटि रिपोर्टिंग है और दुर्भाग्य से, यह जापानी में है इसलिए मुझे नहीं पता कि सटीक त्रुटि क्या है, लेकिन यह सामान्य त्रुटि है मेरे पास मेरे सामने कोड नहीं है, लेकिन मैंने पूरी प्रक्रिया से बाहर निकलने के बाद त्रुटि और आउटपुट को रीडायरेक्ट करने के लिए मैंने प्रतिनिधि पाठ दिखाया। मैं कुछ भी नहीं कर सकता हूं और मैं अपने कंप्यूटर पर उसी प्रक्रिया को चलाने में सक्षम हूं, लेकिन मैं रिमोटिंग के माध्यम से यह एक विशेष आदेश नहीं कर पा रहा हूं। मैं कल काम पर एक गैर जापानी मशीन पर रिमोटिंग करने की कोशिश कर रहा हूं और मैं अपने निष्कर्षों को परवाह किए बिना पोस्ट कर दूंगा। शुक्रवार, 26 अक्टूबर, 2007 2:34 पूर्वाह्न आप कंसोल का उपयोग कर रहे हैं quotcmdquot यदि हां, तो आपको भी बाहर निकलना होगा। शुक्रवार, 26 अक्टूबर, 2007 4:50 पूर्वाह्न यदि आपको पता चलता है कि आपकी प्रक्रिया कितना समय ले जा रही है, तो आप बुल से बाहर निकलने वाली प्रक्रिया का उपयोग कर सकते हैं। वेटफॉरएक्सिट (टाइम इनमिली एसकंड्स) else प्रिंट त्रुटि संदेश यह हो सकता है कि आप क्या कर रहे हैं से संबंधित नहीं हो सकता है, लेकिन मेरे पास एक अनुभव था जहां प्रक्रिया से बाहर नहीं निकलेगा अगर मैं इसका आउटपुट पुनः निर्देशित करता हूं आउटपुट रीडायरेक्शन को निष्क्रिय करने का प्रयास करें और देखें कि क्या प्रक्रिया निकलती है। इसे एक प्रयास करें, यह काम कर सकता है शुक्रवार, 26 अक्टूबर, 2007 11:58 पूर्वाह्न मैं यह कोशिश करना चाहता हूं, लेकिन यह हैक की बहुत अधिक है। मेरे पास बहुत सी भिन्न कमांड हैं जो अलग-अलग समय (30 सेकंड से 25 मिनट) लेते हैं, इसलिए कोई वास्तविक समय सेटिंग नहीं है जो कि मैं अपने प्रदर्शन को नष्ट किए बिना रख सकता हूं यह कार्य पिछले 6 महीनों में कई आदेशों के लिए सही तरीके से काम कर रहा है और अब यह मुझ पर बाहर निकलने का फैसला करता है मैंने इसे एक अलग कंप्यूटर पर बिना किसी समस्या (जो वास्तव में मेरे साथ गड़बड़ कर रहा है) की कोशिश की है। मुझे पता है कि यह आउटपुटर का रीडायरेक्शन नहीं है क्योंकि एक नए विंडों को सर्वर पर बनाया जा रहा है जिसे मैं रिमोट कर रहा हूं। जैसे ही मैं उस विंडो को बंद करता हूं, मेरी प्रक्रिया अपेक्षा से बाहर निकलती है और यूज़र साइड पर सही आउटपुट प्रदर्शित होता है। आपकी मदद के लिए धन्यवाद, लेकिन मैं इस समस्या से वास्तव में निराश हो रहा हूं। शुक्रवार, 26 अक्टूबर, 2007 3:01 PM संदेश के विस्तार के बारे में जानने के बिना ही समस्या पर अनुमान लगाना था। क्या आपने 3.5 बीटा या विजुअल स्टूडियो 2008 बीटा को बिल्कुल भी स्थापित किया है, आप प्रोग्राम, प्रक्रिया। स्टार्ट (quotfile. exequot) को शुरू करने के लिए प्रक्रिया का उपयोग कैसे कर रहे हैं, या क्या आप ProcessStartInfo का उपयोग कर रहे हैं शुक्रवार, 26 अक्टूबर, 2007 3:21 PM नहीं, मेरे पास है 2003 और 2005 स्थापित proc नई प्रक्रिया () procsi new processstartInfo () मैं तो मानक ईर्रर और मानक औटपुट दोनों के लिए एक नया धागा सेटअप करता हूं तो मैं अपनी आज्ञाओं को लिखता हूं और यदि (मानक रीडायरेक्ट) बाहर यदि मानक त्रुटि को पुनर्निर्देशित करना त्रुटि Proc. WaitForExit () लेफ्टिनेंट -------- यह वह जगह है जहां सामान्य Windows त्रुटि रिपोर्टिंग विंडो होती है। मैंने अनुवाद किया है कि खिड़की से जो हो सकता है, वह ऊपर आ गया। माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2005 क्योंकि समस्या आती है, यह माइक्रोसॉफ्ट विज़ुअल स्टूडियो 2005 समाप्त हो जाती है। हम असुविधा को लागू करते हैं, इसमें कोई बहाना नहीं है। आपके सभी समय के लिए फिर से धन्यवाद मैंने प्रोजेक्ट ऑब्जेक्ट को बनाने के लिए StreamWriter sIn बनाया है मैं फिर proc. start () कमांड के बाद इनपुट को रीडायरेक्ट करता हूं, तो मैं इसके बावजूद कैसे न रखता हूं, मैं बदलाव को एसआई में जा सकता हूं। Close () WaitForExit कॉल के बाद यह देखने के लिए कि क्या यह कोई परिवर्तन करता है या नहीं। प्रोक एक प्रकार था, यह प्रक्रिया होना चाहिए था दोबारा, यह एक त्रुटि संदेश नहीं है, इसलिए कोई स्टैक ट्रेस नहीं है मेरा मानक त्रुटि रीडायरेक्शन रिक्त है और मानक आउटपुट रीडायरेक्शन में मुझे क्या उम्मीद है, लेकिन कोई त्रुटि संकेत नहीं हुई। यही कारण है कि मैं विंडोज त्रुटि रिपोर्टिंग विंडो को बंद करने के बाद सब कुछ अभी भी काम करता है। मैं बाद में क्या होता है जब मैं प्रतीक्षा करेंफ़ोयरएक्सिट () लाइन के नीचे sIn. Close () रेखा को स्थानांतरित करने के बाद क्या होता है। शुक्रवार, 26 अक्टूबर, 2007 4:59 अपराह्न पीटर रिची ने लिखा: यदि आप पुनर्रचना कर रहे हैं तो आवेदन समाप्त हो जाने तक आप एसएएन ऑब्जेक्ट को बंद करना चाहते हैं। किसी को उन सभी धाराओं को बंद नहीं करना चाहिए। प्रोसेस ऑब्जेक्ट उन के मालिक हैं और यह स्वयं के बाद सफाई के लिए जिम्मेदार है। एक सबसे अच्छा कॉल प्रक्रिया पर होना चाहिए। प्रक्रिया वस्तु के साथ समाप्त होने के बाद () आपको निश्चित रूप से (i. e. इसके बेमानी) की आवश्यकता नहीं है, लेकिन प्रक्रिया समाप्त होने के बाद इसे समस्या का कारण नहीं होना चाहिए। प्रक्रिया। बंद मानकिनपुट और मानकआउटपुट (और मानक आतंक) नदियों को बंद करने की अनुशंसित विधि है। शुक्रवार, 26 अक्टूबर, 2007 5:03 अपराह्न अगर मुझे पता है कि विस्थापन विधि ने बंद नहीं किया है, तो कम से कम अपने ऑपरेशन के भाग के रूप में मुझे आश्चर्य होगा। मैं इस तथ्य का उपयोग करने के पक्ष में हूं कि जब प्रक्रिया लागू हो जाती है (अप्रत्यक्ष रूप से उस घटक का विस्तार करने के माध्यम से जो इसे लागू करता है), तो उसे निकालना चाहिए और इसे उचित सफाई के लिए दें मैं प्रक्रिया शुरू करने की सिफारिश नहीं करता। इसके बजाय, और इसके अलावा, प्रक्रिया के अलावा बंद करो। हाँ, कॉल निपटाना बंद करें मेरी पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, मेरा दूसरा फोन बंद करना है जब आप जानते हैं कि आप इसके साथ कब करते हैं आईडीसीपोज़ाबल होने के बावजूद एक क्लोज़क्वाट विधि को लागू करने वाले ऑब्जेक्ट्स में, क्वालिटी क्लोज़ॉट विधि का उपयोग करने के लिए इसका अधिक स्पष्ट होना प्लस उपयोग ब्लॉक के उपयोग के बिना आपके पास वेरिएबल को स्कॉप करने का कोई तरीका नहीं है और डिस्झ के लिए कॉल - ऑब्जेक्ट का इस्तेमाल डिस्पास्पिल के कॉल के बाद किया जा सकता है। अगर आप बंद करें, आपके सभी प्रबंधित संसाधनों का निपटान करते हैं, लेकिन ऑब्जेक्ट का उपयोग अभी भी किया जा सकता है (यानी यह quotedizedquot के रूप में ध्वजांकित नहीं किया गया है) और आप इसे एक नई प्रक्रिया ऑब्जेक्ट को आवंटित किए बिना अन्य एप्लिकेशन को चलाने के लिए उपयोग कर सकते हैं - जो अन्यथा ObjectDisposedException )। शुक्रवार, 26 अक्टूबर, 2007 6:09 अपराह्न यदि पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, तो अगला सबसे अच्छा निपटान को कॉल करना होगा। नहीं बंद, जब, जैसा कि आपने कहा था, आप जानते हैं कि आप वस्तु के साथ किया कुछ ऐसी चीज़ों को बंद करने के द्वारा कॉल करने से, जो आईडीिसपोजेबल लागू करता है, डेवलपर संभावित रूप से एक गलती कर रहा है। यदि कुछ अतिरिक्त क्लीनअप को केवल बंद करने के लिए सौंपने के अलावा, तो प्रोग्रामर खुद बग के लिए बॉल बंद करके खुद को स्थापित कर रहा है। कॉल करने के लिए एक मामला हो सकता है, लेकिन केवल तभी यदि आप ऑब्जेक्ट के साथ नहीं किया है, जैसा कि आप अपने आखिरी उत्तर के नीचे इंगित करते हैं। लेकिन जब इसके साथ किया जाता है, तो डिस्पोजेबल कॉल करें। शुक्रवार, 26 अक्टूबर, 2007 6:20 अपराह्न यदि पहली सिफारिश एक उपयोग ब्लॉक का उपयोग करना है, तो अगला सबसे अच्छा निपटान को कॉल करना होगा। नहीं बंद, जब, जैसा कि आपने कहा था, आप जानते हैं कि आप वस्तु के साथ किया कुछ ऐसी चीज़ों को बंद करने के द्वारा कॉल करने से, जो आईडीिसपोजेबल लागू करता है, डेवलपर संभावित रूप से एक गलती कर रहा है। यदि कुछ अतिरिक्त क्लीनअप को केवल बंद करने के लिए सौंपने के अलावा, तो प्रोग्रामर खुद बग के लिए बॉल बंद करके खुद को स्थापित कर रहा है। कॉल करने के लिए एक मामला हो सकता है, लेकिन केवल तभी यदि आप ऑब्जेक्ट के साथ नहीं किया है, जैसा कि आप अपने अंतिम उत्तर के निचले भाग में दर्शाए थे। लेकिन जब इसके साथ किया जाता है, तो डिस्पोजेबल कॉल करें। वास्तव में, इसके बराबर: DisposableClass obj new DisposableClass () IDisposable डिस्पोजेबल obj के रूप में IDisposable अगर (डिस्पोजेबल नल) लेकिन हाँ, यह मानता है कि एक प्रयोग करने वाला कथन उद्धृत रूप से बराबर के बराबर है, लेकिन मैं स्पष्ट रूप से एक क्लॉजक्वाट विधि की उपस्थिति में विवाद को कॉल नहीं करना चाहिए डिस्पोजेज़ कॉल के साथ कमी की वजह से पहली पसंद हो उदाहरण के लिए, निम्नलिखित: प्रक्रिया की प्रक्रिया नई प्रक्रिया ()) मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे के लिए दौड़ा था और कभी भी यह ब्रेकपॉइंट नहीं था कि यह मेरे 10 मिनट के भीतर से शुरू होना चाहिए ग्राहक। मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर सकता हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। शुक्रवार, 26 अक्टूबर, 2007 7:19 अपराह्न एंथोनी मैमोन ने लिखा: मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे के लिए दौड़ा था और कभी भी यह ब्रेकपॉइंट नहीं था कि मुझे अपने ग्राहक की शुरुआत के 10 मिनट के अंदर ही मारा जाना चाहिए था । मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर सकता हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। जब आपको त्रुटि मिलती है (जैसे कॉल स्टैक) अपवाद विवरण देखने में सहायक होगा। आप मानक इनपुट और मानक आउटपुट का उपयोग कैसे कर रहे हैं आप किसी भी रीडलाइन तरीके का उपयोग कर रहे हैं पीटर, मेरा कहना है: यदि आप किसी ऑब्जेक्ट को डिस्पोज़ेट करते हैं जो कि (प्रत्यक्ष या अप्रत्यक्ष रूप से) IDisposable लागू करता है, तो आप केवल एक बग के लिए पूछ रहे हैं मैं बिना इस पर बहस करना चाहता हूं। आप जिस तरह से करते हैं, आप इसे जारी रख सकते हैं, और मेरे साथ रहना। जब तक हम प्रत्येक दूसरे कोड को बनाए रखने नहीं करते हैं, ठीक है। और वैसे, एक कोठरियों का ब्लॉक आपकी रक्षा नहीं करता है ब्लॉक से बाहर चर को घोषित करने से आपको कुछ भी नहीं रोकता है (यदि मुझे सही याद है), तो ब्लॉक समाप्त होने के बाद भी यह दायरे में हो सकता है। आपको सही कोड लिखने में मेहनती होनी चाहिए। यदि आप इसे quotatingquot बयान में घोषित करते हैं, तो एक तरीका है। लेकिन ट्रिनफिनली दृष्टिकोण का उपयोग करने को खारिज करने के लिए, क्योंकि यह गुंजाइश में छोड़ता है, वास्तव में यह मुद्दा नहीं है। यह अभी भी निपटान () डी कहीं की जरूरत है शुक्रवार, 26 अक्टूबर 2007 7:34 PM पीटर रिची ने लिखा है: एंथोनी मैमोन ने लिखा: मुझे सेवा चल रही थी, लेकिन मैंने इसे रोक दिया क्योंकि यह 2 घंटे तक दौड़ गया था और कभी भी ऐसा ब्रेकपॉइंट नहीं था, जिसे 10 मिनट के भीतर मारा जाना चाहिए था मुझे अपने ग्राहक की शुरुआत मैंने sIn. Close () पंक्ति को अभी से जोड़ दिया और सेवा और क्लाइंट को दोबारा शुरू कर दिया और सब कुछ पहले जैसे काम कर रहा था। मैं WaitForExit () के बाद ब्रेकपॉइंट को हिट कर सकता हूं और मैं पूरा कर चुका हूं, Windows त्रुटि रिपोर्टिंग संदेश के साथ अभी भी (जैसा कि पहले था)। इसलिए, मेरे मामले में, अपेक्षित प्रक्रिया से बाहर निकलने में सक्षम होने के लिए मुझे इनपुट स्ट्रीम बंद करने की आवश्यकता है क्या कोई अन्य विचार हैं यदि आप कुछ जांचना चाहते हैं तो मैं sIn. Close () लाइन को दोहरा सकता हूं। जब आपको त्रुटि मिलती है (जैसे कॉल स्टैक) अपवाद विवरण देखने में सहायक होगा। आप मानक इनपुट और मानक आउटपुट का प्रयोग कैसे कर रहे हैं क्या आप किसी भी रीडलाइन तरीके का उपयोग कर रहे हैं, यह एक अपवाद नहीं है जो फेंका जा रहा है, इसलिए मुझे कोई अपवाद विवरण नहीं दिखाई दे रहा है। मैं सीधे अपने कोड में कैच ब्लॉक में नहीं जाता हूं, मैं सीधे WaitForExit () कॉल के बाद फिर से शुरू करता हूं। जिस विंडो को मैं प्राप्त कर रहा हूं वह वही है जिसे आप प्राप्त करते हैं जब कोई माइक्रोसॉफ्ट उत्पाद अप्रत्याशित रूप से बंद हो जाता है और एमएस क्रैश के बारे में जानकारी चाहता है तो फिर, कोई अपवाद विवरण नहीं है। हालांकि सिस्टम लॉग्स में से एक में, मैं एक मेसेज (जापानी से अनुवादित) प्राप्त कर रहा हूं। QuotDevenv. exe एप्लिकेशन एरोस उत्पन्न होता है, त्रुटियों के 8.0.50727.762 संस्करण msvcr80.dll मॉड्यूल, संस्करण 8.0.50727.762, त्रुटि हुई पता 0x00039001 अधिक जानकारी के लिए, Helo और सहायता केंद्र पर जाएँ। माइक्रोसॉफ्टफ़्लैक्सएवंट्स. एपी कृपया देखें.मैं विभिन्न आदेशों में पारित करने के लिए मानक इनपुट को पुन: निर्देशित कर रहा हूं क्योंकि मुझे उन्हें काम करने के लिए परेशानी हो रही थी कि मैं कैसे StartInfo का निर्माण करना चाहता था मैं आउटपुट और त्रुटि धाराओं को पुन: निर्देशित कर रहा हूं ताकि यह जांच सकें कि प्रक्रिया के बाद से उनके पास क्या है। यह मुझे किसी चीज की जांच करने की इजाजत देगी जो मैं एक बार समाप्त हो जाने के बाद या तो स्ट्रीम में चाहूंगा। मैं किसी भी आउटपुट या त्रुटि रीडायरेक्शन धागे को भी शामिल नहीं होने की प्रक्रिया के बाद WaitForExit कॉल पास कर दिया है। मैं पूरी तरह से स्टम्प्ड हूं शुक्रवार, 26 अक्टूबर, 2007 7:53 PM पीटर, मेरा कहना है: यदि आप किसी ऑब्जेक्ट को डिस्पोजेज ऑब्जेक्ट न करें (सीधे या अप्रत्यक्ष रूप से) IDisposable, तो आप बस एक बग के लिए पूछ रहे हैं मैं बिना इस पर बहस करना चाहता हूं। आप जिस तरह से करते हैं, आप इसे जारी रख सकते हैं, और मेरे साथ रहना। जब तक हम प्रत्येक दूसरे कोड को बनाए रखने नहीं करते हैं, ठीक है। मैं सहमत नहीं हूँ। डिस्पोजेबल कॉल नहीं करने के लिए यह कोई उद्धरण नहीं है। आपके संसाधन तुरंत मुक्त हो जाते हैं, लेकिन जीसी यदि उन्हें स्मृति की जरूरत होती है तो (उन्हें निपटाने के पैटर्न ठीक से लागू किया जाता है और अंतिम रूप से मौजूद है) उन्हें छोड़ दिया जाएगा। यदि आप उपयोग कर रहे वर्ग को एक क्लॉक्स्क्वाट विधि लागू करता है जो सभी समान चीजें जो कि 'डिस्पोज़क्वाट' कहते हैं, बंद करें को या तो दस्तावेज के रूप में या क्लास में एक बग दर्ज करना चाहिए। Ive कभी एक ढांचे वर्ग का सामना नहीं किया जो IDisposable और एक क्लोज़ () विधि लागू करता है जो एक quotleququot प्रस्तुत किया था जब क्लोज़ को कॉल किए बिना बुलाया गया था DisposeClose के लिए भारी पैटर्न यह है कि कॉल्स को निपटाएं और साथ ही एक उद्धरणविरोधी ध्वज सेट करना (ऑब्जेक्ट डिस्पाइज्ड एक्सपेशेशन फेंकने के लिए उपयोग किया गया) वास्तव में यह फ़्रेमवर्क सामान्य संदर्भ में विस्तृत है: एक विशेष रूप से एक डोमेन-विशिष्ट नाम डिस्पोज़ से उचित है। उदाहरण के लिए, एक फाइल एनकॉप्शन हो सकता है, विधि नाम बंद करें का उपयोग करना। इस स्थिति में, निजी तौर पर निपटाना लागू करें और एक सार्वजनिक बंद करें विधि को कॉल करें जो कि कॉल डिस्पाज करें। निम्न कोड का उदाहरण इस पैटर्न को दिखाता है। आप अपने domain. quot के लिए उपयुक्त एक विधि नाम के साथ बंद कर सकते हैं कार्यान्वित करने से अंतिम रूप से निष्पादित और अप्रबंधित संसाधनों को साफ करने के साथ-साथ वस्तुओं के कुछ वर्गों जैसे कि फाइलों या डेटाबेस कनेक्शन ऑब्जेक्ट्स के लिए, क्लोज़ विधि बेहतर तरीके से तार्किक संचालन का प्रतिनिधित्व करता है ऑब्जेक्ट उपभोक्ता को ऑब्जेक्ट के साथ पूरा किया जाना चाहिए। प्रबंधित कोड निष्पादन में सुधार करने से (हालांकि यह भी उल्लेख किया गया है कि अच्छी तरह से लिखित मामलों में, दोनों कार्यात्मक रूप से समतुल्य हैं।) इसका मतलब यह है कि बंद का उपयोग करने वाले कोटेटर के साथ अधिक स्पष्ट है। और वैसे, एक कोठरियों का ब्लॉक आपकी रक्षा नहीं करता है ब्लॉक से बाहर चर को घोषित करने से आपको कुछ भी नहीं रोकता है (यदि मुझे सही याद है), तो ब्लॉक समाप्त होने के बाद भी यह दायरे में हो सकता है। आपको सही कोड लिखने में मेहनती होनी चाहिए। यदि आप इसे quotatingquot बयान में घोषित करते हैं, तो एक तरीका है। लेकिन ट्रिनफिनली दृष्टिकोण का उपयोग करने को खारिज करने के लिए, क्योंकि यह गुंजाइश में छोड़ता है, वास्तव में यह मुद्दा नहीं है। यह अभी भी निपटान () डी कहीं की जरूरत है हां, सभी प्रकार के तरीकों से आप अपने आप को पैर में गोली मार सकते हैं, लेकिन वह बात नहीं है जो हम चर्चा कर रहे थे। मैं व्यक्तिगत रूप से उस कोड की समीक्षा करेगा जो मैंने इस तरह की समीक्षा की थी। That would be on my not recommended list. Friday, October 26, 2007 7:54 PM Again, this is NOT an Exception that is being thrown, so I am not seeing any exception details. I do not go directly to the catch block in my code, I resume DIRECTLY after the WaitForExit() call. The window I am receiving is the same one you get when ANY Microsoft product unexpectedly closes and MS wants information about the Crash. So again, there is NO exception details. However in one of the System Logs, I am receiving a mesage (translated from Japanese) quotDevenv. exe application erros occur, 8.0.50727.762 version of the errors occurred msvcr80.dll module, version 8.0.50727.762, errors occurred address 0x00039001. For more information, go. microsoftfwlinkevents. asp the Helo and Support Center please refer. quot I assumed your application was generating the message (in which case you should always get an exception and a stack trace) it wasnt clear that you resume after the call to WaitForExit(). It sounds to me like the application youre running is terminating abnormally. Are you running devenv. exe Im not sure what you can do in your application to stop another application from terminating abnormally. Anthony Maimone wrote: I am redirecting the Standard input to pass in the different commands in because I was having trouble getting them to work how I wanted form the StartInfo. I am redirecting the Output and Error streams to check what they have in them after the process has exited. This will allow me to check for anything that I would like in either stream once we have finished. I also do not allow either of the output or error redirection threads to join until after the process has passed the WaitForExit call. I am completely stumped. You can get a deadlock if you block on reading from and applications standard output--which would unblock if you closed the stream, I believe. The only thing I can think about is creating an application that is running on the server and monitor windows comming form the processes that you are controling remotely and then find the correct buttons and press them programaticaly pusing a message to the message pump of the dialog window. This alos happens with excel, word and other applications that can be used with autimation MSFT did not design these applications to be run without user interaction so once in a while you will get windows on errors. Have you considered using MSBuid that is more appropiate for batch builds, also it seems that in TFS 2008 build servers will be easy to build. Saturday, October 27, 2007 11:07 AM Well, I attempted to use FindWindow and FindWindowEx along with SendMessage but I was unable to find the correct window handle. But since I know that a Windows Error Reporting Msssage Box will be popping up, I checked to see if it was its own process (and it is). The process is dwwin. exe (Dr. Watson Win ) and all I had to do was this to allow myself to get correct the current problem. Substitute the current code block below for the WaitForExit() statement that I had previously. proc. WaitForExit(60000) one minute Process ProcArray Process. GetProcessesByName(quotdwwinquot) foreach( Process ProcessFound in ProcArray ) I also checked to see if you were able to get the Process. MainWindowTitle(), but it is set to quotquot. So this is a hack and I really do not like to use it, but it works for the current execution. Monday, October 29, 2007 7:26 PM
No comments:
Post a Comment