2010-02-17 11 views
7

Domanda: Devo disabilitare il prompt di arresto anomalo dell'applicazione della console.Disabilita richiesta di debug in caso di arresto anomalo dell'applicazione

Background: Abbiamo un'applicazione che sincronizza informazioni con una terza parte che si blocca a causa di problemi di connettività con il 3 ° partito in certi momenti della giornata. Non abbiamo accesso al codice sorgente per intercettare correttamente l'errore, quindi ho solo bisogno che l'applicazione fallisca e riprovo. Ho un'altra applicazione che monitora il nostro strumento di sincronizzazione per assicurarci che sia in esecuzione.

quando le app di sincronizzazione si bloccano, c'è una richiesta di debug che richiede l'interazione dell'utente. Poiché rimane sullo schermo, l'applicazione non smette mai di funzionare. Di conseguenza, il controllo "health " non conosce mai l'errore.

Ho fatto circa 2 anni fa ma per la vita di me non riesco a ricordare l'articolo o il percorso del registro necessario.

Grazie, Brian

OS: Windows 2003 Server Tipo Applicazione: NET 3.5 applicazione console


FIX: trovato da: John Knoeller

Delet e le seguenti chiavi

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ DbgManagedDebugger

+1

La comunità wiki risposta accettata sulla http://stackoverflow.com/questions/3561545/how-to-terminate-a-program -when-it-crashes-which-should-just-fail-a-unit-test/3637710 # 3637710 è anche una risorsa molto utile. – PJTraill

+0

Simili: https://stackoverflow.com/questions/735170/can-the-application-error-dialog-box-be-disabled – Vadzim

risposta

9

Forse questo?

How to: Enable/Disable Just-In-Time Debugging

Le chiavi di registro sono

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug\Debugger 
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\DbgManagedDebugger 
+0

ESATTAMENTE !! Grazie! Nota: scorri fino al percorso del registro se non hai installato VS HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AeDebug \ Debugger HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ DbgManagedDebugger – used2could

+0

Il debug JIT non è nemmeno entrato nella mia mente quando si cerca su google – used2could

2

soluzione di Giovanni come un file reg (avevamo bisogno di rotolare questo fuori a un cluster di server di build):

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug] 
"Debugger"=- 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework] 
"DbgManagedDebugger"=- 
6

Eliminazione chiavi intere sembra un approccio troppo "martello".

Primo, è possibile utilizzare le funzioni API di Windows SetErrorMode e/o SetThreadErrorMode. Possono anche essere PInvoked dall'applicazione .NET.

Le firme correlati per PInvoke sono:

public enum ErrorMode : uint 
    { 
     SEM_DEFAULT     = 0x0000, 
     SEM_FAILCRITICALERRORS  = 0x0001, 
     SEM_NOGPFAULTERRORBOX  = 0x0002, 
     SEM_NOALIGNMENTFAULTEXCEPT = 0x0004, 
     SEM_NOOPENFILEERRORBOX  = 0x8000 
    } 

    [DllImport("Kernel32.dll")] 
    public static extern ErrorMode SetErrorMode(ErrorMode mode); //available since XP 

    [DllImport("Kernel32.dll")] 
    public static extern ErrorMode GetErrorMode(); //available since Vista 

    [DllImport("kernel32.dll", SetLastError = true)] 
    public static extern bool SetThreadErrorMode(ErrorMode newMode, out ErrorMode oldMode); //available since Windows 7 

    [DllImport("Kernel32.dll")] 
    public static extern ErrorMode GetThreadErrorMode(); //available since Windows 7 


In secondo luogo, c'è una soluzione più specifica basato sul Registro dal Vista:
esclusa solo questa applicazione da in fase di debug.Vedere questo:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb204634(v=vs.85).aspx

copia-incolla:

Tranne un applicazione da Automatico Debug

La seguente procedura descrive come escludere un'applicazione da debug automatico dopo il valore Auto sotto la La chiave AeDebug è stata impostata su 1.

- > Per escludere un'applicazione ione da debug automatico passare alla seguente chiave di registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug
Aggiungere un valore REG_DWORD al AutoExclusionList sottochiave, dove il nome è il nome del file eseguibile e il valore è 1.
Per impostazione predefinita, il desktop Window Manager (Dwm.exe) è escluso dal debug automatico perché altrimenti si può verificare un deadlock di sistema se Dwm.exe smette di rispondere (l'utente non può vedere l'interfaccia visualizzata dal debugger perché Dwm.exe non risponde e Dwm.exe non può terminare perché è trattenuto dal debugger).
Windows Server 2003 e Windows XP: La sottochiave AutoExclusionList non è disponibile; quindi non è possibile escludere alcuna applicazione, incluso Dwm.exe, dal debug automatico.

Le voci del Registro AeDebug di default può essere rappresentato come segue:
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion AeDebug Auto = 1 AutoExclusionList DWM.exe = 1

+0

+1, è necessario che una modifica della chiave del Registro di sistema su ciascuna macchina in esecuzione sul programma sia frustrante. Molto meglio con una chiamata API! –

Problemi correlati