2010-07-12 11 views
7

Estoy obteniendo una pantalla azul cuando se ejecuta mi aplicación Windows Winform. Parece que solo un usuario está obteniendo esto. No estoy seguro de dónde buscar este problema en este momento. Sin embargo, estoy usando algún código que encontré en CodeProject para atrapar eventos de mouse y eventos de teclado http://www.codeproject.com/KB/cs/globalhook.aspx ¿podría ser este?mi programa .net está causando un BSOD

Estoy buscando sugerencias sobre cómo podría atrapar este error. Solo está ocurriendo en la computadora de uno de cada 40 usuarios, así que estoy un poco perplejo, especialmente porque este usuario es el principal interesado.

Actualización: Tenemos un incidente más: el denominador común es el puerto de acoplamiento. El usuario estaba usando el mismo puerto de acoplamiento.

+9

Parece que el problema es la computadora de este usuario. Verifique sus registros de eventos, puede que no tenga nada que ver con su aplicación. – roufamatic

+1

¿Su aplicación usa código no administrado o PInvoke? – David

+1

Segunda rutina. La "parte interesada principal" suele ser el tipo con más poder y el menor conocimiento ... –

Respuesta

12

Es imposible que su código sea causando un BSOD. Si no está ejecutando en modo kernel, entonces un BSOD no es su culpa (si excusa el juego de palabras).

OTOH, he visto que el código administrado desencadena un error en una parte del código del modo kernel. Este error luego provocó un BSOD. En mi caso, el código kernel-mode formaba parte de una pieza de software VPN que quería entender qué código se estaba ejecutando para poder decidir si permitir o no el acceso a la VPN. El código usaba ganchos de kernel-mode para hacer esto, y tenían un error que se activaba al cargar grandes cantidades de ensamblajes.

Aparentemente, nunca habían probado su código mientras se ejecutaba Visual Studio. Carga complementos y demás en tiempo de ejecución, lo que desencadenó su error. Una pieza de código C# que simplemente cargó un gran número de ensamblajes en un AppDomain (luego descargó el AppDomain y comenzó de nuevo) también activó su error, por lo que no fue un problema de Visual Studio.

La moraleja de la historia es que alguien tiene que mirar el volcado de emergencia y descubrir qué parte del software en modo kernel causó el colapso, entonces quizás puedas descubrir qué estaba pasando en el sistema para activar el kernel -modo de software para colgar.

+1

+1 para el juego de palabras. – overslacked

3

El problema no va a ser su aplicación directamente, sino un problema con su sistema, por lo que, como dice roufamatic, los registros de eventos son de eventos. Sin embargo, hay dos errores comunes de 'hardware' que tienden a causar este tipo de problema y puede verificarlos de forma rentable para ver si le dan una pista.

  1. Mala memoria. Si se ha desarrollado un error de memoria, no es inusual ver un programa en particular que puede 'causar' que se acceda a la mala memoria y conducir a un BSOD. Si, por ejemplo, generalmente ejecuta aplicaciones bastante livianas, entonces es posible que el error de memoria esté en una ubicación que normalmente no se usa. Cuando carga su aplicación, especialmente si tiene una gran huella de memoria y llama a muchas dependencias, puede desencadenar el bloqueo indirectamente. Por lo tanto, ejecute una comprobación completa en la memoria RAM de la máquina.

  2. Controladores de impresora. Esto solía ser más un problema de lo que es ahora, pero si está ejecutando en XP entonces todavía aparece de vez en cuando. Los controladores de impresora están mal escritos y, con frecuencia, fallan. No es extraño que una aplicación llame a un controlador de impresora que a su vez bloquea el sistema. Para verificar esto, simplemente quite los controladores de la impresora y luego vuelva a cargarlos.

EDITAR: Como se señala en los comentarios, cualquier hardware o controladores incorrectos pueden causar este tipo de comportamiento. Simplemente destaco los controladores de memoria y de impresora porque la experiencia muestra que estos dos son de lejos las causas más comunes que vale la pena considerar primero.

+0

Podría ser malo * *, o mala * * controladores. También podría ser un error en algún otro código no administrado (kernel-level). –

+1

@Blue - oh absolutamente, podría ser cualquier cosa. Es solo que la experiencia demuestra que la mala memoria y los malos controladores de impresora son los más comunes, por lo que vale la pena consultar primero. – Cruachan

1

He tenido que resolver este problema antes. Estaba escribiendo el código C# del modo de usuario para hablar con un dispositivo HID en el bus USB. Este problema ocurrió en mi computadora portátil pero en la máquina de nadie más. Resultó que estaba causando problemas porque tenía un sistema operativo de 64 bits y, por lo tanto, tenía controladores de 64 bits. Todos los demás usuarios tenían controladores de 32 bits, que no tenían el problema. Este era un conjunto de usuarios ligeramente controlados. Conocía a cada usuario y ellos eran usuarios competentes que podían darme información sobre su hardware, sistema operativo y controladores. También estábamos todos usando el mismo dispositivo.

No recuerdo cómo DETERMINÉ el problema. Pero lo resolví simplemente configurando el proyecto de la aplicación solo para Windows de 32 bits. Sin una aplicación de 64 bits, el controlador defectuoso nunca se utiliza.

Haga que los usuarios actualicen sus controladores, su hardware o cambien el código para evitar usar el controlador por completo.

Cuestiones relacionadas