Altermativ kannst du ja auch WM_ENDSESSION senden. Darauf sollte sich jede Anwendung ohne weitere Rückfragen selbst beenden.
Was ist wenn noch Daten gespeichert oder zum Abschluss Benutzerhandlungen durchgeführt werden müssen?
Alternativ habe ich bei einigen Programmen beobachtet das Updates erst nach Programmende eingespielt werden.
Programmstart: auf Updates prüfen -> Updates runterladen -> normaler Programmablauf -> Programmende: Updates einspielen