2010-07-12 9 views
7

Viene visualizzata una schermata blu quando viene eseguita l'applicazione Winform Windows. Sembra che solo un utente stia ottenendo questo. Non sono sicuro di dove attualmente cercare il problema. Sto comunque utilizzando un codice che ho trovato su CodeProject per intrappolare eventi del mouse e eventi tastiera http://www.codeproject.com/KB/cs/globalhook.aspx potrebbe essere?il mio programma .net sta causando un BSOD

Sto cercando suggerimenti su come poter intercettare questo errore. Sta succedendo solo su un computer degli utenti su 40, quindi sono un po 'perplesso - soprattutto perché questo utente è il principale stakeholder.

Aggiornamento: Abbiamo un altro incidente: il comune denominatore è la porta di attracco. L'utente stava usando la stessa porta docking.

+9

Sembra che il problema sia il computer di questo utente. Controlla i registri degli eventi, potrebbe non avere nulla a che fare con la tua app. – roufamatic

+1

La tua app utilizza codice non gestito o PInvoke? – David

+1

Secondo roufamatic. "Partecipante principale" è spesso il ragazzo con più potere e la minima conoscenza ... –

risposta

12

È impossibile che il codice sia causando a BSOD. Se non stai correndo in modalità kernel, allora un BSOD non è colpa tua (se vuoi scusare il gioco di parole).

OTOH, Ho visto codice gestito innescare un bug in un pezzo di codice in modalità kernel. Questo bug ha causato un BSOD. Nel mio caso, il codice in modalità kernel faceva parte di un pezzo di software VPN che voleva capire quale codice stavi correndo in modo che potesse decidere se consentire o meno l'accesso alla VPN. Il codice utilizzava ganci in modalità kernel per fare ciò e presentava un bug che veniva attivato dal caricamento di un numero elevato di assiemi.

Apparentemente, non avevano mai testato il loro codice mentre Visual Studio era in esecuzione. Carica componenti aggiuntivi e simili in fase di runtime, che hanno attivato il loro bug. Un pezzo di codice C# che semplicemente caricava un numero elevato di assiemi in un AppDomain (quindi scaricava AppDomain e ricominciava) attivava anche il loro bug, quindi non era un problema di Visual Studio.

La morale della storia è che qualcuno ha bisogno di guardare il crash dump e capire quale parte del software in modalità kernel ha causato l'arresto, quindi forse è possibile capire cosa stava succedendo nel sistema per attivare il kernel -Modifica il software in crash.

+1

+1 per il gioco di parole. – overslacked

3

Il problema non sarà la tua app direttamente, ma qualche problema con il suo sistema, così come dice che check è registri degli eventi. Tuttavia ci sono due errori "hardware" comuni che tendono a causare questo tipo di problema e potresti controllarli vantaggiosamente per vedere se ti danno un vantaggio.

  1. Memoria errata. Se si è verificato un errore di memoria, non è insolito vedere un particolare programma che può "causare" l'accesso alla cattiva memoria e quindi portare a un BSOD. Se, ad esempio, generalmente esegue applicazioni abbastanza leggere, è possibile che l'errore di memoria si trovi in ​​una posizione che normalmente non viene utilizzata. Quando carichi la tua app, in particolare se ha un ingombro di memoria elevato e chiama molte dipendenze, potresti innescare il crash in modo indiretto. Quindi eseguire un controllo completo sulla RAM della macchina.

  2. Driver di stampa. In passato questo era più un problema di quanto non lo sia ora, ma se stai usando XP, lo fa ancora saltuariamente. I driver della stampante sono notoriamente scritti male e sono spesso buggy. Non è raro che un'applicazione invochi un driver di stampa che a sua volta arresta il sistema. Per controllare questo basta rimuovere i driver della stampante, quindi ricaricarli di nuovo in seguito.

MODIFICA: come indicato nei commenti, qualsiasi hardware danneggiato o driver non valido può causare questo tipo di comportamento. Evidenzia semplicemente i driver di memoria e di stampa perché l'esperienza dimostra che questi due sono di gran lunga le cause più comuni, quindi vale la pena considerare prima.

+0

Potrebbe essere un errore * * o un cattivo * * driver. Potrebbe anche essere un bug in qualche altro codice non gestito (a livello del kernel). –

+1

@Blue - oh, assolutamente, potrebbe essere qualsiasi cosa. È solo che l'esperienza mostra che la cattiva memoria e i cattivi driver di stampa sono i più comuni, quindi vale la pena controllare prima. – Cruachan

1

Ho dovuto risolvere questo problema prima. Stavo scrivendo il codice C# in modalità utente per parlare con un dispositivo HID sul bus USB. Questo problema si è verificato sul mio portatile ma sulla macchina di nessun altro. Si è scoperto che stava causando problemi perché ero in esecuzione un sistema operativo a 64 bit e quindi aveva driver a 64 bit. Tutti gli altri utenti avevano driver a 32 bit, che non avevano il problema. Questo era un insieme di utenti moderatamente controllato. Conoscevo ogni utente ed erano utenti competenti che potevano darmi informazioni sul loro hardware, sistema operativo e driver. Anche noi stavamo usando lo stesso dispositivo.

Non ricordo come ho determinato il problema. Ma ho risolto il problema semplicemente impostando il progetto dell'applicazione solo su Windows a 32 bit. Senza un'app 64 bit, il driver difettoso non viene mai utilizzato.

Gli utenti aggiornano i loro driver, il loro hardware o cambiano il codice per evitare di utilizzare del tutto il driver.

Problemi correlati