2012-03-06 14 views
5

तो मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो किसी अन्य डेवलपर द्वारा लिखे गए कंसोल एप्लिकेशन पर नज़र रखता है। कंसोल एप्लिकेशन क्रैश होने की संभावना है और क्योंकि यह पूरी रात चलता है मुझे इसे पुनरारंभ करने के लिए अपने आवेदन की आवश्यकता होती है।सी # Process.exited को बंद करने के बाद तक कॉल नहीं किया जाता है

दुर्भाग्यवश जब कंसोल ऐप दुर्घटनाग्रस्त हो जाता है तो मुझे विंडोज़ संदेश मिलता है जो कहता है कि "ब्लाह ने काम करना बंद कर दिया है" और एक बटन जो करीबी कार्यक्रम कहता है।

मैं System.Diagnostic.Process उपयोग कर रहा हूँ सांत्वना आवेदन शुरू करने के लिए, लेकिन मैं निर्धारित नहीं कर सकता है, तो कंसोल आवेदन जब तक के बाद करीब प्रोग्राम बटन हिट है दुर्घटनाग्रस्त हो गया है। प्रक्रिया। रिस्पॉन्डिंग हमेशा सत्य होती है (कोई विंडोज हैंडल नहीं है) प्रक्रिया। एक्सचेंज को बंद प्रोग्राम बटन हिट होने तक निकाल दिया जाता है।

कोई भी विचार बहुत उपयोगी होगा।

धन्यवाद

+0

पता नहीं है कि आप सी # में इसके बारे में क्या कर सकते हैं, लेकिन एक संभावित विकल्प आपके लिए बंद बटन पर क्लिक करने के लिए एक स्वचालन उपकरण (जैसे ऑटोआईटी) का उपयोग करना है। –

+0

क्या दोनों अनुप्रयोग .NET में लिखे गए हैं? –

+0

कोई कंसोल ऐप .net – user1253149

उत्तर

2

विंडोज क्रैश रिपोर्टिंग सुविधा को अक्षम करें। प्रक्रिया विफल होने पर कर्नेल द्वारा अधिसूचित किया जाता है। प्रक्रिया तब तक जीवित है जब तक क्रैश रिपोर्टिंग चीज़ इसके साथ नहीं की जाती है।

सुविधा कुछ एपीआई का उपयोग कर प्रति प्रक्रिया को अक्षम किया जा सकता है। Disabling Windows error reporting (Dr. Watson) for my process स्थानीय समस्या को ठीक करने के लिए वैश्विक स्तर पर इसे अक्षम न करें।

+0

के साथ नहीं लिखा गया है, इसलिए मैंने अक्षम किया है, इसलिए यह समाधान की खोज नहीं करता है लेकिन मुझे अभी भी एक विंडो पॉप अप मिलती है। – user1253149

+5

सिर्फ एक आवेदन के लिए सिस्टम-व्यापी परिवर्तन को कार्यान्वित करना एक स्पर्श भारी हाथ लगता है। –

+0

मैं मूल उत्तर में स्पष्ट नहीं था: सुविधा को कुछ एपीआई का उपयोग करके प्रति-प्रक्रिया अक्षम किया जा सकता है। http://stackoverflow.com/questions/1134343/disabling-windows-error-reporting-dr-watson-for-my-process – usr

0
  1. यह कंसोल ऐप के लिए एक अच्छा मामला नहीं है। windows service या scheduled task बेहतर फिट होगा।

  2. अपने कंसोल अनुप्रयोग, दुर्घटनाग्रस्त के रूप में अन्य व्यक्ति ने कहा, अपनी प्रक्रिया windows error reporting

आप मेरी सलाह चाहते हैं द्वारा काट दिया जा रहा है क्योंकि आप किसी भी error handling

  • न करना पड़े, मेरे पास छोटी जानकारी के साथ जा रहा है, मुझे लगता है कि में है, जिस तरह से यह अब है, इसलिए में पूरी प्रक्रिया को लपेटें को आजमाएं और catch ब्लॉक में अपवाद से निपटें इसलिए यह विंडोज़ त्रुटि रिपोर्टिंग तक बबल नहीं करता है। फिर वहां से पुनरारंभ करें।

    संपादित करें: व्यक्ति को पर्याप्त उत्तर मिला है, लेकिन मैं इसे googlers के लिए छोड़ रहा हूं। मैं ध्यान रखना चाहता हूं कि विंडोज़ त्रुटि रिपोर्टिंग बंद कर दिए बिना प्रक्रिया के दुर्घटना पर रैपर एप्लिकेशन को कभी भी नियंत्रण नहीं मिलेगा, इसलिए यह प्रक्रिया में एक महत्वपूर्ण कदम है।

  • 2

    ProcessStartInfo.ErrorDialog = false;

    0

    यह मेरे लिए काम करने लगता है पर देखो:

    System.Diagnostics.Process process = new System.Diagnostics.Process(); 
    System.Diagnostics.ProcessStartInfo startinfo = new System.Diagnostics.ProcessStartInfo(); 
    startinfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 
    startinfo.FileName = @"PATH TO EXE"; 
    startinfo.Arguments = "Arg1 Arg2 Arg3"; 
    startinfo.ErrorDialog = false; 
    startinfo.RedirectStandardError = true; 
    startinfo.UseShellExecute = false; 
    process.StartInfo = startinfo;   
    process.Start(); 
    process.WaitForExit(); 
    process.Kill(); 
    
    संबंधित मुद्दे

     संबंधित मुद्दे