2010-01-26 19 views
39

Me gustaría saber cuál es la función de API de Windows (si existe) que proporciona información sobre la última fuente de reinicio de Windows. Hay tres principales causas posibles:¿Cómo puedo obtener el último reinicio de Windows? Motivo

  1. El equipo que haya fallado en una pantalla azul
  2. Un usuario o un cierre del programa/reiniciado el equipo
  3. Un poder perdió

Los detalles más que puedo obtener lo mejor. Sin embargo, necesito saber al menos qué motivo es de los principales.

necesito compatible con Windows Vista y Windows 7.

Respuesta:

Parece que no hay ninguna API directa para obtener esa información. En cambio, tenemos que cosechar el registro de eventos de Windows. La información de reinicio del sistema se encuentra en el Visor de eventos/Registros de Windows/Sistema. Aquí está la diversa información proporcionada por los identificadores de eventos:

  • 6005: Windows
  • 6006 la puesta en marcha: apagado de Windows (correctamente)
  • 6008: el apagado de Windows (inesperadamente)

I todavía no entiendo la diferencia entre la pérdida de energía y el bloqueo del sistema, pero es un buen comienzo.

+0

Duplicar posibles: http://stackoverflow.com/questions/1315858/get-windows-server-shutdown-reason-in-c –

+2

Este post es sobre C#, necesito API de Windows (C/C++) – Frederic

Respuesta

16

Tome un vistazo a la Event Log API. Caso a) (pantalla azul, el usuario cortó el cable de alimentación o cuelgue el sistema) hace que una nota ('el sistema no se apagó correctamente' o algo así) se deje en el registro de eventos 'Sistema' la próxima vez que se reinicie el sistema correctamente. Debería poder acceder a él programáticamente usando la API anterior (sinceramente, nunca lo he usado, pero debería funcionar).

+0

Suena bien, pero ¿qué debería estar buscando? – Frederic

+1

Encontrado, está en el registro de eventos del sistema. – Frederic

+1

Me he dado cuenta de que este mensaje aparece cuando el sistema se congela: "El sistema se ha reiniciado sin haber cerrado antes limpiamente. Este error podría deberse a que el sistema dejara de responder, se bloqueara o perdiera energía inesperadamente". Esto parece un mensaje genérico. ¿Alguien sabe si hay una manera de diferenciar entre bluescreens y congelaciones del sistema? –

20

Este article explica en detalle cómo encontrar el motivo del último arranque/apagado. En mi caso, esto se debió a que Windows SCCM empujó las actualizaciones aunque lo tenía deshabilitado localmente. Visita el artículo para más detalles con imágenes. Como referencia, aquí están los pasos de copiar/pegar desde el sitio web:

  1. Pulse las teclas de Windows + R para abrir el cuadro de diálogo Ejecutar, escriba eventvwr.msc y pulse Intro.

  2. Si lo solicita UAC, haga clic/toque Sí (Windows 7/8) o Continuar (Vista).

  3. En el panel izquierdo del Visor de eventos, haga doble clic/toque Logs de Windows para expandirlo, haga clic en Sistema para seleccionarlo, luego haga clic derecho en Sistema y haga clic/toque en Filtrar registro actual.

  4. Realice los pasos 5 o 6 a continuación para saber qué eventos de apagado le gustaría ver.

  5. para ver las fechas y horas de todas paros del usuario del ordenador

    A) Haga clic/toque en la flecha desplegable a la derecha de las fuentes de eventos, verificación de la caja USER32, y haga clic/tap en el campo.

    B) En el campo, escriba 1074, luego haga clic/toque Aceptar.

    C) Esto le dará una lista de apagado (apagado) y reiniciar tipo de evento de apagado en la parte superior del panel central en el Visor de eventos.

    D) Puede desplazarse por estos eventos enumerados para buscar los eventos con apagado como Tipo de apagado. Notará la fecha y el tiempo de , y qué usuario fue el responsable de apagar la computadora según el evento de apagado listado.

    S) Ir al paso 7.

  6. Para ver las fechas y horas de todos los paros inesperados de la computadora

    Una) en el campo, tipo 6008, a continuación, haga clic/toque en OK.

    B) Esto le dará una lista de eventos de apagado inesperados en la parte superior del panel central en el Visor de eventos. Puede desplazarse por estos eventos listados en para ver la fecha y la hora de cada uno.

  7. Cuando haya terminado, puede cerrar el Visor de eventos.

+0

Perfecto. Utilicé el filtro de origen de evento con USER32 y descubrí que la recuperación de Dell estaba reiniciando mi sistema. – max

+0

Gracias! El filtrado de eventos del sistema con identificaciones de eventos de ** 6008 ** enumera los eventos críticos que causaron el cierre. –

+0

Esto es esencialmente una respuesta de solo enlace. En caso de que el enlace se vuelva inaccesible, esta respuesta carece de información útil. Además, el OP está pidiendo una llamada API. Su enlace proporciona la respuesta navegando al usuario a través de una serie de pasos manuales. Esto no constituye una solución al problema planteado. – IInspectable

Cuestiones relacionadas