C # - Cómo detectar un apagado / cierre de sesión de Windows y cancelar esa acción (después de preguntarle al usuario)

Alguna explicación: para un proyecto en el que estoy trabajando, tengo que escribir un programa que se ejecute en segundo plano, detecte cambios en los archivos y cargue los archivos modificados en un servicio web para que estén disponibles para otros. Sincronización bastante simple si no fuera por el caso cuando un usuario modifica un archivo grande y decide apagar su computadora justo después de la edición.

Podría cancelar la carga y esperar el próximo reinicio para hacer la carga, pero puedo imaginar al usuario descargando el archivo de la web a otra computadora a la mañana siguiente y no entiendo por qué sus cambios de la noche anterior no están allí.

Entonces, mi idea era detectar cuándo los usuarios cierran la sesión o reinician Windows, y si estoy en medio de una carga, solo le pregunto al usuario "Todavía estamos sincronizando el archivoFoo.txt que acabas de cambiar ¿Seguro que quieres reiniciar? ¡Sus cambios no estarán disponibles para otros hasta que reinicie su computadora! ". Si los usuarios dicen que no, tendré que cancelar el reinicio / desconexión

es posible?

Respuestas a la pregunta(3)

Su respuesta a la pregunta