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.)
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;
}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 FunctionPour 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




