मैं Windows Vista पर 'डीबग / क्लोज एप्लिकेशन' संवाद को कैसे अक्षम कर सकता हूं?


86

जब कोई अनुप्रयोग Windows पर क्रैश होता है और एक डीबगर जैसे Visual Studio स्थापित होता है तो निम्न मोडल संवाद प्रकट होता है:

[शीर्षक: माइक्रोसॉफ्ट विंडोज]

X ने काम करना बंद कर दिया है

एक समस्या के कारण प्रोग्राम ने ठीक से काम करना बंद कर दिया। विंडोज प्रोग्राम को बंद कर देगा और यदि कोई समाधान उपलब्ध है तो आपको सूचित करेगा।

[डिबग] [करीबी आवेदन]

क्या इस संवाद को निष्क्रिय करने का कोई तरीका है? यही है, कार्यक्रम बस दुर्घटना और चुपचाप जला है?

मेरा परिदृश्य यह है कि मैं कई स्वचालित परीक्षणों को चलाना चाहूंगा, जिनमें से कुछ परीक्षण के तहत आवेदन में कीड़े के कारण दुर्घटनाग्रस्त हो जाएंगे। मैं इन संवादों को स्वचालन चलाने को रोकना नहीं चाहता।

चारों ओर खोज मुझे लगता है कि मैंने इसे Windows XP पर अक्षम करने के लिए समाधान स्थित किया है, जो इस reg कुंजी को nuking कर रहा है:

HKLM \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger

हालाँकि, यह Windows Vista पर काम नहीं करता था।


AeDebug \ Debugger कुंजी को देखने का मेरे लिए Windows XP के तहत कोई प्रभाव नहीं पड़ा, या तो डिबगिंग या गैर-डिबगिंग लाइब्रेरी के साथ संकलित कंसोल एप्लिकेशन पर।
rptb1

जवाबों:


56

प्रोग्राम को डिबग करने के लिए संकेत देने के बजाय क्रैश डंप लेने और ऐप को बंद करने के लिए विंडोज त्रुटि रिपोर्टिंग (WER) को मजबूर करने के लिए, आप इन रजिस्ट्री प्रविष्टियों को सेट कर सकते हैं:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting]
"ForceQueue"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\Consent]
"DefaultConsent"=dword:00000001

यह सेट होने के बाद, जब आपके ऐप्स क्रैश होते हैं, तो आपको * .hdmp और * .mdmp फ़ाइलों को देखना चाहिए:

%ALLUSERSPROFILE%\Microsoft\Windows\WER\

3
DefaultConsent = 1 डिफ़ॉल्ट प्रतीत होता है। DontShowUI के बारे में क्या?
Zitrax

ForceQueue का Te प्रलेखन अस्पष्ट है, मुझे इसका ठीक-ठीक मतलब नहीं है।
Zitrax

2
@NicJ कृपया अपने उत्तर में DontShowUI = 1 जोड़ें, यह आवश्यक है
Youda008

1
HKEY_CURRENT_USER के तहत भी सेट किया जा सकता है, मुझे विश्वास है
PJTraill

2
विंडोज़ रजिस्ट्री संपादन आईटी नरक का रास्ता है, बेहतर आर्मेनज से उत्तर पर विचार करें
लोटेक

45

यहाँ देखें:

http://msdn.microsoft.com/en-us/library/bb513638.aspx

regedit

DWORD HKLM या HKCU \ Software \ Microsoft \ Windows \ Windows त्रुटि रिपोर्टिंग \ DontShowUI = "1"

WER चुपचाप रिपोर्ट बना देगा। फिर आप सेट कर सकते हैं

DWORD HKLM या HKCU \ Software \ Microsoft \ Windows \ Windows त्रुटि रिपोर्टिंग \ अक्षम = "1"

एमएस से बात करने से रोकने के लिए।


एक वीएसटीएस बिल्ड एजेंट मुद्दे को ठीक करने में मेरे लिए काम किया जहां मैं सेलेनियम परीक्षण चलाने की कोशिश कर रहा था। धन्यवाद!
Stu1986C

36

मुझे यकीन नहीं है कि यह बिल्कुल उसी संवाद को संदर्भित करता है लेकिन यहां रेमंड चेन का एक वैकल्पिक दृष्टिकोण है :

DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);

हां, SetErrorMode को कॉल करना जो OP द्वारा उल्लिखित WER संवाद को रोकता है।
रोमन स्टार्कोव

2
मेरे पास SetErrorMode और SEM_NOGPFAULTERRORBOX ध्वज की समस्या यह है कि यह एक डंप फ़ाइल नहीं बनाता है और Windows इवेंट लॉग में एक प्रविष्टि करता है। क्रैश होने पर आपका प्रोग्राम बिना किसी निशान के गायब हो जाएगा। इस कारण से मुझे लगता है कि रजिस्ट्री समाधान बेहतर है।
डेरेक

यह पुराने ढांचे (WinXP के बाद से) के लिए भी काम करता है।
वुल्फ

1
सहमत हैं कि यह जहाज के साथ अच्छा नहीं है। हालांकि, ऑटोमेशन कार्यों के लिए अस्थिर करना वास्तव में उपयोगी है।
kayleeFrye_onDeck

31

फ़ायरफ़ॉक्स के लिए विंडोज 64-बिट्स पर रिलीज़ ऑटोमेशन के काम के लिए मुझे इसे निष्क्रिय करना पड़ा और मैंने निम्न कार्य किया:

  • gpedit.msc
  • कंप्यूटर कॉन्फ़िगरेशन -> प्रशासनिक टेम्पलेट
  • विंडोज घटक -> विंडोज त्रुटि रिपोर्टिंग
  • सक्षम करने के लिए महत्वपूर्ण त्रुटियों के लिए "उपयोगकर्ता इंटरफ़ेस का प्रदर्शन रोकें" सेट करें

यह वैसा ही है जैसा कि ग्राहक अनुभव रिपोर्टिंग के लिए पूरा किया गया था: http://www.blogsdna.com/2137/fix-windows-installer-explorer-update-has-stopping-working-in-windows-7.htm


13

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

#include <windows.h>
#include <rtcapi.h>
int exception_handler(LPEXCEPTION_POINTERS p)
{
    printf("Exception detected during the unit tests!\n");
    exit(1);
}
int runtime_check_handler(int errorType, const char *filename, int linenumber, const char *moduleName, const char *format, ...)
{
    printf("Error type %d at %s line %d in %s", errorType, filename, linenumber, moduleName);
    exit(1);
}

int main()
{
    DWORD dwMode = SetErrorMode(SEM_NOGPFAULTERRORBOX);
    SetErrorMode(dwMode | SEM_NOGPFAULTERRORBOX);
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)&exception_handler); 
    _RTC_SetErrorFunc(&runtime_check_handler);

    // Run your tests here

    return 0;
}

8

WPF आवेदन में

[DllImport("kernel32.dll", SetLastError = true)]
static extern int SetErrorMode(int wMode);

[DllImport("kernel32.dll")]
static extern FilterDelegate SetUnhandledExceptionFilter(FilterDelegate lpTopLevelExceptionFilter);
public delegate bool FilterDelegate(Exception ex);

public static void DisableChashReport()
{
 FilterDelegate fd = delegate(Exception ex)
 {
  return true;
 };
 SetUnhandledExceptionFilter(fd);
 SetErrorMode(SetErrorMode(0) | 0x0002 );
}

ऐसा नहीं लगता है कि वहाँ कुछ भी WPF- विशिष्ट है, और यह मेरे कंसोल एप्लीकेशन में भी ठीक काम करने लगता है, (.NET
10.2

4

आपको एक अनहेल्ड अपवाद फ़िल्टर लागू करना होगा, जो केवल आपके आवेदन को क्विट करता है, फिर उस फ़िल्टर फ़ंक्शन को SetUnhandledExceptionFilter () के साथ सेट करें ।

यदि आप सुरक्षित CRT का उपयोग कर रहे हैं, तो आपको अपना स्वयं का अमान्य पैरामीटर हैंडलर भी उपलब्ध कराना होगा और इसे _set_invalid_parameter_handler () के साथ सेट करना होगा ।

इस ब्लॉग पोस्ट में कुछ जानकारी भी है: http://blog.kalmbachnet.de/?postid=75


4

परीक्षण के दौरान आप ADPlus से जुड़े 'डिबगर' के साथ चल सकते हैं , जो त्रुटियों पर डेटा (मिनीडंप) एकत्र करने के लिए कई उपयोगी तरीकों से कॉन्फ़िगर किया जा सकता है और फिर भी आपके द्वारा ऊपर दिए गए मॉडल संवाद समस्याओं को रोक सकता है।

यदि आप कुछ उपयोगी जानकारी प्राप्त करना चाहते हैं जब आपका ऐप उत्पादन में क्रैश हो जाता है तो आप ADPlus डेटा के समान कुछ प्राप्त करने के लिए Microsoft त्रुटि रिपोर्टिंग को कॉन्फ़िगर कर सकते हैं ।


4

यह सवाल का सीधा जवाब नहीं है क्योंकि यह एक वर्कअराउंड है और सवाल यह है कि उस सुविधा को कैसे अक्षम किया जाए, लेकिन मेरे मामले में, मैं सीमित अनुमतियों वाले सर्वर पर एक उपयोगकर्ता हूं और किसी एक का उपयोग करके सुविधा को अक्षम नहीं कर सकता हूं अन्य जवाब। इसलिए, मुझे वर्कअराउंड की आवश्यकता थी। यह कम से कम कुछ अन्य लोगों के लिए काम करेगा जो इस प्रश्न पर समाप्त होते हैं।

मैंने ऑटोहोटेक पोर्टेबल का इस्तेमाल किया और एक मैक्रो बनाया जो एक बार देखता है कि पॉपअप बॉक्स मौजूद है या नहीं और अगर ऐसा है तो प्रोग्राम को बंद करने के लिए बटन पर क्लिक करता है। मेरे मामले में, यह पर्याप्त है, और अन्य उपयोगकर्ताओं के लिए इस सुविधा को छोड़ देता है। इसके लिए यह आवश्यक है कि जब मैं कम से कम जोखिम वाला कार्यक्रम चलाऊं तो मैं स्क्रिप्ट शुरू कर दूं, लेकिन यह मेरी जरूरतों के लिए काम करता है।

स्क्रिप्ट इस प्रकार है:

sleep_duration = 60000 ; how often to check, in milliseconds.
                       ; 60000 is a full minute

Loop
{
    IfWinExist, ahk_class #32770 ; use autohotkey's window spy to confirm that
                ; ahk_class #32770 is it for you. This seemed to be consistent
                ; across all errors like this on Windows Server 2008
    {
        ControlClick, Button2, ahk_class #32770 ; sends the click.
                ; Button2 is the control name and then the following
                ; is that window name again
    }
    Sleep, sleep_duration ; wait for the time set above
}

संपादित करें: एक त्वरित ध्वज। जब अन्य चीजें ऊपर होती हैं, तो यह अग्रभूमि विंडो में नियंत्रण को सक्रिय करने का प्रयास लगता है - इसे पृष्ठभूमि में कार्यक्रम में भेजना चाहिए। यदि मुझे कोई फिक्स मिलता है, तो मैं इसे दर्शाने के लिए इस उत्तर को संपादित करूंगा, लेकिन अभी के लिए, इसे इस्तेमाल करने के बारे में सतर्क रहें और एक ही समय में एक मशीन पर अन्य काम करने की कोशिश करें।


3

समय डिबगर में बस से छुटकारा पाने के लिए इंटरनेट पर बाकी सब कुछ करने की कोशिश करने के बाद, मुझे एक सरल तरीका मिला जो वास्तव में काम करता था और मुझे उम्मीद है कि इससे आपको मदद मिलेगी।

कंट्रोल पैनल पर जाएं प्रशासनिक टूल पर जाएं सेवाओं पर जाएं मशीन डिबग प्रबंधक के लिए सूची नीचे देखें उस पर राइट क्लिक करें और जनरल टैब के नीचे गुण पर क्लिक करें, स्टार्ट अप टाइप के लिए देखें अक्षम पर क्लिक करें। अप्लाई और ओके पर क्लिक करें।

मैंने तब से डिबगर संदेश नहीं देखा है, और मेरा कंप्यूटर पूरी तरह से चल रहा है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.