كيف يمكنني تعطيل مربع حوار "Debug / Close Application" على نظام التشغيل Windows Vista؟

StackOverflow https://stackoverflow.com/questions/396369

سؤال

عند تعطل تطبيق على Windows ويتم تثبيت مصحح الأخطاء مثل Visual Studio، يظهر مربع حوار المشرف التالي:

العنوان: Microsoft Windows

توقف X عن العمل

تسببت مشكلة في البرنامج في التوقف عن العمل بشكل صحيح. سيقوم Windows بإغلاق البرنامج وإعلامك إذا كان الحل متاحا.

تصحيح] [تطبيق إغلاق

هل هناك طريقة لتعطيل هذا الحوار؟ هذا هو، هل لديك البرنامج فقط تحطم وحرق بصمت؟

سيناريو الخاص بي هو أنني أود تشغيل العديد من الاختبارات الآلية، وبعضها سوف يتعطل بسبب الأخطاء في التطبيق قيد الاختبار. لا أريد أن تكرر حوار الحوار هذه التشغيل الأتمتة.

البحث عنك وأعتقد أنني موجود الحل لتعطيل هذا على نظام التشغيل Windows XP، وهو NUKING NEG KEY:

HKLM Software Microsoft Windows NT CurrentVersion AedBug Debugger

ومع ذلك، لم يعمل ذلك على نظام التشغيل Windows Vista.

هل كانت مفيدة؟

المحلول

لإجبار إعداد الإبلاغ عن خطأ Windows (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\

نصائح أخرى

انظر هنا:

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

regedit

dword hklm أو hkcu software microsoft windows windows الأخطاء الإبلاغ "dontshowui =" 1 "

ستجعل أكثر تقرير بصمت. ثم يمكنك ضبط

DWORD HKLM أو HKCU Software Microsoft Windows Windows Error Reporting Disabled = "1"

لمنعها من التحدث إلى MS.

لست متأكدا مما إذا كان هذا يشير إلى نفس الحوار بالضبط ولكن هنا هو نهج بديل من ريموند تشن:

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

اضطررت إلى تعطيل هذا لإصدار التشغيل الأتمتة للعمل على نظام التشغيل Windows 64-Bits for Firefox وقدمت ما يلي:

  • gpedit.msc.
  • تكوين الكمبيوتر -> القوالب الإدارية
  • مكونات Windows -> إعداد الإبلاغ عن Windows
  • اضبط "منع عرض واجهة المستخدم للأخطاء الحرجة" ممكنة

إنه مماثل ما تم إنجازه لتجربة العملاء التقارير في:http://www.blogsdna.com/2137/fix-windows-installer-explor-update-has-stopped-working-in-windows-7.htm.

في سياقتي، أريد فقط قمع المنبثقة عن اختبارات وحدتي وليس للنظام بأكمله. لقد وجدت أن هناك حاجة إلى مزيج من الوظائف من أجل قمع هذه الأخطاء، مثل اصطياد الاستثناءات غير المعالجة، وقمع عمليات التحقق وقدة التشغيل (مثل صلاحية مؤشر المكدس) وأعلام وضع الخطأ. هذا ما استخدمته مع بعض النجاح:

#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;
}

في تطبيق 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 );
}

عليك أن تنفذ مرشح استثناء غير معالج يتم إنهاء التطبيق الخاص بك، ثم قم بتعيين وظيفة المرشح هذه مع setunhandledexceptionfilter ().

إذا كنت تستخدم CRT الآمنة، فعليك أيضا تقديم معالج المعلمة غير الصحيحة وتعيين هذا مع _set_invalid_parameter_handler.().

هذه المدونة وظيفة لديها بعض المعلومات أيضا:http://blog.kalmbachnet.de/؟postid=75.

أثناء الاختبار، يمكنك تشغيله مع "مصحح الأخطاء" مثل adplus المرفقة والتي يمكن تكوينها في العديد من الطرق المفيدة لجمع البيانات (miniDumps) على الأخطاء وعادت منع مشاكل مربع الحوار مشروط في الحالة أعلاه.

إذا كنت ترغب في الحصول على بعض المعلومات المفيدة عندما تعطل تطبيقك في الإنتاج، فيمكنك تكوين خطأ في Microsoft خطأ للحصول على شيء مشابه لبيانات Applus.

هذه ليست إجابة مباشرة على السؤال لأن هذا هو الحل البديل والمسألة حول كيفية تعطيل هذه الميزة، ولكن في حالتي، أنا مستخدم على خادم مع أذونات محدودة ولا يمكن تعطيل الميزة باستخدام أحد الإجابات الأخرى. لذلك، كنت بحاجة إلى حل بديل. من المحتمل أن يعمل هذا على الأقل بعض الآخرين الذين ينتهي بهم الأمر على هذا السؤال.

انا إستعملت autohotkey المحمولة وقم بإنشاء ماكرو بمجرد التحقق من دقيقة لمعرفة ما إذا كان المربع المنبثق موجود، وإذا حدث ذلك، انقر فوق الزر لإغلاق البرنامج. في حالتي، هذا يكفي، ويترك الميزة للمستخدمين الآخرين. يتطلب الأمر أن أبدأ البرنامج النصي عند تشغيل البرنامج المعرض للخطر، لكنه يعمل من أجل احتياجاتي.

البرنامج النصي كما يلي:

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
}

تعديل: علم سريع. عندما تصبح الأمور الأخرى، يبدو أن هذا يحاول تنشيط عناصر التحكم في النافذة المقدمة - من المفترض أن يرسله إلى البرنامج في الخلفية. إذا وجدت إصلاحا، سأقوم بتحرير هذه الإجابة لتعكسها، ولكن الآن، كن حذرا حول استخدام هذا ومحاولة القيام بعمل آخر على جهاز في نفس الوقت.

بعد تجربة كل شيء آخر على شبكة الإنترنت للتخلص من مصحح الأخطاء في الوقت المناسب، وجدت طريقة بسيطة تعمل بالفعل وآمل أن تساعد شخصا آخر.

انتقل إلى لوحة التحكم انتقل إلى الأدوات الإدارية، انتقل إلى الخدمات، انظر إلى أسفل قائمة مدير Debug Manager انقر بزر الماوس الأيمن فوقه وانقر فوق خصائص ضمن علامة التبويب عام، ابحث عن نوع بدء التشغيل انقر فوق تعطيل. انقر فوق "تطبيق" و "موافق".

لم أر رسالة مصحح الأخطاء منذ ذلك الحين، ويتم تشغيل جهاز الكمبيوتر الخاص بي تماما.

بدلا من تغيير القيم في السجل، يمكنك تعطيل الإبلاغ عن الأخطاء على Windows Server 2008 R2 و Windows Server 2012 و Windows 8 مع: serverWerOptin /disable

https://technet.microsoft.com/en-us/library/hh875648(V=WS.11).aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top