2011-03-02 13 views
6

¿Alguien sabe si es posible detectar si el último arranque fue precedido por un corte de energía en Windows?Detectar cuando Windows se reinició después de un bloqueo o fallo de alimentación

Mi razón para querer detectar esto es saber cuándo volver a escanear los archivos que con frecuencia modifico en el disco con mi servicio.

Si se produce un inicio normal, puedo estar bastante seguro de que el apagado se realizó sin problemas y que los datos almacenados en los búferes de archivos en memoria se descargaron al disco.

Respuesta

1

Como una implementación simple, ¿no funcionaría CreateFile con FILE_FLAG_DELETE_ON_CLOSE (seguido inmediatamente por FlushFileBuffers solo para estar seguro)?

Si el sistema se apaga limpiamente, la aplicación se cerrará y el identificador del archivo se cerrará, por lo que el sistema operativo eliminará el archivo.

Si falla la alimentación o el mundo se acaba, el sistema operativo no tiene la posibilidad de cerrar ningún controlador o eliminar ningún archivo. Por lo tanto, el archivo seguirá presente después de que el sistema vuelva a aparecer.

+0

Esto también podría funcionar para Linux, ¡divertido! –

5

La detección de fallas de alimentación solo cubrirá un posible motivo de terminación anormal. La forma más segura de hacer esto es crear un archivo de marcador cuando comiences y luego eliminarlo cuando finalice el proceso de forma limpia. Si el archivo de marcador existe en el siguiente inicio, usted sabe que su servicio no finalizó de forma limpia.

Si solo desea buscar la pérdida de potencia, al leer el event log, verá si el último apagado fue inesperado.

2

¿Por qué no comprobar si su proceso finalizó correctamente? Coloque un marcador especial en el registro o en el sistema de archivos, eso significará que su proceso todavía está funcionando y elimínelo en el apagado gracefull. Luego, verifíquelo en cada inicio.

Cuestiones relacionadas