How to gracefully handle computer shutdown from WPF application
- 1 Application Events
- 2 AppDomain Events
- 3 How to simulate Windows shutdown for debugging?
When you start the application
Startup -> Activated
When you shut the application down normally (i.e. close main window)
Deactivated -> Exit
If user is logging out of or shutting down Windows
Deactivated -> SessionEnding
Application gets focus
Application loses focus
When an exception is not caught
(DispatcherUnhandledException is raised by an Application for each exception that is unhandled by code running on the main UI thread, but if you can safely ignore that and wait for UnhandledException is raised by AppDomain)
How to simulate Windows shutdown for debugging?
There is a tool named Restart Manager (rmtool.exe) in the Microsoft's Logo Testing Tools for Windows, which can be used to send shutdown and restart messages to a process. Logo testing tools can be downloaded here:
Then you can simulate shutdown for your process:
rmtool.exe -p [PID] -S
where [PID] is the process ID. According to the Vista Logo Certification Test Cases document,
Restart Manager shutdown messages are:
a) WM_QUERYENDSESSION with LPARAM = ENDSESSION_CLOSEAPP(0x1): GUI applications must respond (TRUE) immediately to prepare for a restart.
b) WM_ENDSESSION with LPARAM = ENDSESSION_CLOSEAPP(0x1): The application must shutdown within 5 seconds (20 seconds for services).
c) CTRL_SHUTDOWN_EVENT: Console applications must shutdown immediately.