Quelle est la technologie qui permet à Windows de redémarrer automatiquement votre application en cas de défaillance de celle-ci ?

| Microsoft MSDN France | Jérôme Lambert |

Retrouvez l'intégralité des questions / réponses sur le développement sous Windows 7 dans l'article suivant.

Commentez cet article : Commentez ♪

- Titre : Quelle est la technologie qui permet à Windows de redémarrer automatiquement votre application en cas de défaillance de celle-ci ?

- Auteurs : Microsoft MSDN France, Jérôme Lambert

- Parution : 7 mars 2010

- Licence : Copyright ® 2011 Microsoft MSDN France. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Quelle est la technologie qui permet à Windows de redémarrer automatiquement votre application en cas de défaillance de celle-ci ?

I - Quelle est la technologie qui permet à Windows de redémarrer automatiquement votre application en cas de défaillance de celle-ci ?

Windows 7 et Windows 2008 R2, fournissent des API, qui permettent à une application si elle défaille de :

- s'enregistrer pour qu'elle redémarre automatiquement ;

- fournir un pointeur de fonction afin que Windows puisse la rappeler pour sauvegarder d'éventuelles données, avant l'arrêt et le redémarrage.

Ces deux fonctionnalités ne sont actives qu'après 60 secondes après leur enregistrement.

Pour les développeurs .NET, cette API est disponible dans Windows API Code Pack, sous l'espace de nom Microsoft.WindowsAPICodePack.ApplicationServices (http://code.msdn.microsoft.com/WindowsAPICodePack.)

Listing C#

ApplicationRestartRecoveryManager.RegisterForApplicationRestart(new RestartSettings("/restart", RestartRestrictions.NotOnReboot | RestartRestrictions.NotOnPatch));

RecoveryData donnees=new RecoveryData (new RecoveryCallback (ProcedureDeRappel),null );
RecoverySettings configuration=new RecoverySettings (donnees,0);
ApplicationRestartRecoveryManager.RegisterForApplicationRecovery(configuration);

private int ProcedureDeRappel(object state)
{
bool IsCanceled =
ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress();
MessageBox.Show("Procedure De Rappel");
if (IsCanceled)
{
MessageBox.Show("Annulée par l'utilisateur");
Environment.Exit(2);
}
return 0;
}

Listing VB

ApplicationRestartRecoveryManager.RegisterForApplicationRestart(New RestartSettings("/restart", (RestartRestrictions.NotOnReboot Or RestartRestrictions.NotOnPatch)))
Dim donnees As New RecoveryData(New RecoveryCallback(AddressOf Me.ProcedureDeRappel), Nothing)
Dim configuration As New RecoverySettings(donnees, 0)
ApplicationRestartRecoveryManager.RegisterForApplicationRecovery(configuration)

Private Function ProcedureDeRappel(ByVal state As Object) As Integer
Dim IsCanceled As Boolean = ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress
MessageBox.Show("Procedure De Rappel")
If IsCanceled Then
MessageBox.Show("Annulée par l'utilisateur")
Environment.Exit(2)
End If
Return 0
End Function

Pour les développeurs MFC, la prise en charge se fait automatiquement à partir de l'assistant :

Pour les développeurs Win32 il faut utiliser les API :

RegisterApplicationRestart(PCWSTR pwzCommandline, DWORD dwFlags)
RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK pRecoveryCallback,
PVOID pvParameter,
DWORD dwPingInterval,
DWORD dwFlags
);

Pour plus d'infos :

- Pour en savoir plus sur les API Win32, suivez le coach http://msdn.microsoft.com/fr-fr/visualc/ff770825.aspx

- MSDN : http://msdn.microsoft.com/fr-fr/windows/default.aspx

- Le coach Windows 7 : http://msdn.microsoft.com/fr-fr/windows/msdn.coach.windows7

- Kit de développement pour Windows 7 : http://msdn.microsoft.com/fr-fr/windows/gg398052.aspx