Linee guida per le applicazioni
Le applicazioni in esecuzione in Windows Vista e Windows Server 2008 devono rispettare queste linee guida per garantire che Gestione riavvio possa arrestare e riavviare le applicazioni, se necessario per installare gli aggiornamenti. I servizi possono usare le linee guida descritte in Linee guida per i servizi.
Restart Manager esegue una query sulle applicazioni GUI per l'arresto inviando una notifica di WM_QUERYENDSESSION con il parametro lParam impostato su ENDSESSION_CLOSEAPP (0x1). Le applicazioni non devono essere arrestate quando ricevono un messaggio di WM_QUERYENDSESSION perché un'altra applicazione potrebbe non essere pronta per l'arresto. Le applicazioni GUI devono restare in ascolto del messaggio WM_QUERYENDSESSION e restituire un valore TRUE se l'applicazione è pronta per arrestare e riavviare. Se nessuna applicazione restituisce un valore FALSE, Restart Manager invia un messaggio di WM_ENDSESSION con il parametro lParam impostato su ENDSESSION_CLOSEAPP (0x1) e il parametro wparam impostato su TRUE. Le applicazioni devono essere arrestate solo quando ricevono il messaggio di WM_ENDSESSION . Gestione riavvio invia anche un messaggio di WM_CLOSE per le applicazioni GUI che non vengono arrestate durante la ricezione di WM_ENDSESSION. Se un'applicazione GUI risponde a un messaggio di WM_QUERYENDSESSION restituendo un valore FALSE, l'arresto viene annullato. Tuttavia, se l'arresto è forzato, l'applicazione viene terminata indipendentemente.
Quando un'applicazione GUI riceve un messaggio di WM_ENDSESSION , l'applicazione deve prepararsi per l'arresto entro il periodo di timeout specificato. Come minimo, le applicazioni devono prepararsi salvando i dati utente e le informazioni sullo stato necessarie dopo un riavvio. È consigliabile che le applicazioni salvino periodicamente i dati e lo stato dell'utente.
Gestione riavvio invia una notifica CTRL_C_EVENT alle applicazioni console che devono essere arrestate e riavviate. Quando un'applicazione console riceve una notifica di CTRL_C_EVENT , l'applicazione deve eseguire azioni necessarie per preparare un arresto entro il periodo di timeout specificato. Come minimo, le applicazioni console devono definire una funzione HandlerRoutine per gestire la notifica CTRL_C_EVENT e salvare i dati utente e le informazioni sullo stato che saranno necessarie dopo un riavvio. È consigliabile che le applicazioni salvino periodicamente i dati e lo stato dell'utente.
Se le applicazioni non vengono arrestate in risposta ai messaggi di arresto, i programmi di installazione possono usare l'opzione RmForceShutdown della funzione RmShutdown per forzare l'arresto delle applicazioni. Quando il programma di installazione specifica un arresto forzato, Restart Manager tenta di arrestare le applicazioni in modo pulito inviando i messaggi di arresto, ma li forza l'arresto in caso di errore. È possibile forzare l'arresto di applicazioni gui e applicazioni console per abilitare l'installazione di un aggiornamento della sicurezza critico. Poiché ciò può comportare la perdita di dati, le applicazioni devono gestire i messaggi di arresto e arrestarsi correttamente quando necessario.
Le applicazioni devono registrarsi per un riavvio usando la funzione RegisterApplicationRestart . Restart Manager può riavviare solo le applicazioni registrate per il riavvio. Questo è l'unico modo in cui Gestione riavvio può determinare il comando della riga di comando da usare durante il riavvio dell'applicazione. Se l'applicazione deve riaprire con uno stato o dati salvati, tali informazioni devono essere incluse nel comando della riga di comando registrato per l'applicazione.
Nota
Se l'applicazione riavviata deve essere eseguita nella stessa directory in cui è stata eseguita prima dell'arresto, l'applicazione deve salvare le informazioni sulla directory e quindi passare alla directory dopo il riavvio.
Nota
La funzione RmRestart non riavvia le applicazioni che non vengono eseguite come utente attualmente connesso. Ad esempio, la funzione RmRestart non riavvia le applicazioni avviate con il comando RunAs che non viene eseguito come utente attualmente connesso. Queste applicazioni devono essere riavviate manualmente.
Quando Gestione riavvio determina che è necessario un riavvio del sistema per installare un aggiornamento, non arresta applicazioni e servizi. Lascia invece questo al programma di installazione per decidere quando pianificare un riavvio del sistema e installare l'aggiornamento. I programmi di installazione possono ridurre l'interruzione agli utenti causati da aggiornamenti che richiedono un riavvio del sistema usando la funzione ExitWindowsEx con il flag EWX_RESTARTAPPS o la funzione InitiateShutdown con il flag SHUTDOWN_RESTARTAPPS . L'uso di questi flag garantisce che le applicazioni registrate per il riavvio vengano riavviate dopo un riavvio del sistema, riducendo al minimo l'impatto sull'utente.