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

Toutes les semaines un peu de code pour aller plus loin avec Windows 7

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

Commentez cet article : 41 commentaires Donner une note à l'article (5)

Article lu   fois.

Les deux auteurs

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 APIS, 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#
Sélectionnez
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
Sélectionnez
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 :

Image non disponible

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

 
Sélectionnez
RegisterApplicationRestart(PCWSTR pwzCommandline, DWORD dwFlags)
RegisterApplicationRecoveryCallback(APPLICATION_RECOVERY_CALLBACK pRecoveryCallback,
  PVOID pvParameter,
  DWORD dwPingInterval,
  DWORD dwFlags
);
Pour plus d'infos :

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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. Droits de diffusion permanents accordés à Developpez LLC.