UDF > WinAPIEx > Diagnostic >


_WinAPI_RegisterApplicationRestart

Enregistre l'instance active d'une application pour le redémarrage

#include <WinAPIDiag.au3>
_WinAPI_RegisterApplicationRestart ( [$iFlags = 0 [, $sCmd = '']] )

Paramètres

$iFlags [optionnel] Les flags qui spécifient un événement lorsque l'application ne sera pas redémarrée. Ce paramètre peut être 0 ou une ou plusieurs des valeurs suivantes:
$RESTART_NO_CRASH
$RESTART_NO_HANG
$RESTART_NO_PATCH
$RESTART_NO_REBOOT
$sCmd [optionnel] Les arguments de ligne de commande pour l'application lors de son redémarrage. La taille maximale de la ligne de commande que vous pouvez spécifier est de 2048 caractères. Si ce paramètre est la chaîne vide (par défaut), la ligne de commande précédemment enregistrée est retirée.

Valeur de retour

Succès: Retourne 1.
Échec: Retourne 0 et définit @error <> 0, @extended contient le code d'erreur HRESULT.

Remarques

Votre inscription initiale pour le redémarrage doit avoir lieu avant que l'application rencontre une exception non gérée ou qu'elle ne réponde plus. Vous pouvez ensuite appeler cette fonction à partir de l'intérieur de votre fonction de rappel de récupération pour mettre à jour la ligne de commande. Pour éviter un redémarrage cycliques, le système ne redémarre l'application que si elle est en cours d'exécution depuis 60 secondes minimum.

Si vous inscrivez une application pour le redémarrage et qu'elle rencontre une exception non gérée ou ne répond pas, l'utilisateur a la possibilité de redémarrer l'application; l'application n'est pas automatiquement redémarrée sans le consentement de l'utilisateur.

Cette fonction nécessite Windows Vista ou une version ultérieure.

Voir aussi

Consultez RegisterApplicationRestart dans la librairie MSDN.

Exemple

#include <APIDiagConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <StaticConstants.au3>
#include <WinAPIDiag.au3>
#include <WinAPISys.au3>

If Number(_WinAPI_GetVersion()) < 6.0 Then
    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), 'Erreur', 'Requiert Windows Vista ou une version ultérieure.')
    Exit
EndIf

Global $g_iCount = 10

Local $hForm = GUICreate('Test '& StringReplace(@ScriptName, '.au3', '()'), 300, 100)
Local $idLabel = GUICtrlCreateLabel('L''application sera stoppée après '& $g_iCount & 'secondes.', 10, 43, 280, 14, $SS_CENTER)
GUISetState(@SW_SHOW)

If $CmdLine[0] And ($CmdLine[1] = '/crash') Then
    MsgBox(BitOR($MB_ICONWARNING, $MB_SYSTEMMODAL), 'Attention', 'L''application a été redémarrée après un arrêt anormal.', 0, $hForm)
EndIf

If Not @Compiled Then
    _WinAPI_RegisterApplicationRestart(BitOR($RESTART_NO_PATCH, $RESTART_NO_REBOOT), '"' & @ScriptFullPath & '" /crash')
Else
    _WinAPI_RegisterApplicationRestart(BitOR($RESTART_NO_PATCH, $RESTART_NO_REBOOT), '/crash')
EndIf

AdlibRegister('_Countdown', 1000)

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _Countdown()
    Local $iData
    #forceref $iData

    $g_iCount -= 1
    If $g_iCount Then
        GUICtrlSetData($idLabel, 'L''application sera stoppée après '& $g_iCount & 'secondes.')
    Else
        Local $tData
        ; Arrêt forcé du script en raison d'une violation d'accès mémoire
        $tData = DllStructCreate('int', 0x12345678)
        $iData = DllStructGetData($tData, 1)
    EndIf
EndFunc   ;==>_Countdown