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
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