Funktionreferenz


_WinAPI_RegisterApplicationRestart

Beschreibung anzeigen in

Registriert die aktive Instanz einer Anwendung für einen Neustart

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

Parameter

$iFlags [optional] Die Flags, die ein Ereignis angeben, bei dem die Anwendung nicht neu gestartet wird. Dieser Parameter kann sein 0 oder einer oder mehrere der folgenden Werte.
$RESTART_NO_CRASH
$RESTART_NO_HANG
$RESTART_NO_PATCH
$RESTART_NO_REBOOT
$sCmd [optional] Die Befehlszeilenargumente für die Anwendung, wenn sie neu gestartet wird. Die maximale Größe der Befehlszeile, die Sie angeben können, beträgt 2048 Zeichen. Wenn dieser Parameter eine leere Zeichenfolge ist (Standard), wird die zuvor registrierte Befehlszeile entfernt.

Rückgabewert

Erfolg: 1.
Fehler: 0 und setzt @error Flag ungleich Null, @extended Flag kann den HRESULT Fehlercode enthalten.

Bemerkungen

Ihre Erstregistrierung für den Neustart muss erfolgen, bevor die Anwendung auf eine unbehandelte Ausnahme stößt oder nicht mehr reagiert. Sie könnten diese Funktion dann aus Ihrem Wiederherstellungsrückruf heraus aufrufen, um die Befehlszeile zu aktualisieren. Um zyklische Neustarts zu verhindern, startet das System die Anwendung nur dann neu, wenn sie mindestens 60 Sekunden lang gelaufen ist.

Wenn Sie sich für einen Neustart registrieren und die Anwendung auf eine unbehandelte Ausnahme stößt oder nicht reagiert, wird dem Benutzer die Möglichkeit geboten, die Anwendung neu zu starten; die Anwendung wird nicht automatisch neu gestartet ohne die Zustimmung des Benutzers.

Diese Funktion erfordert Windows Vista oder höher.

Siehe auch

Suche nach RegisterApplicationRestart in der MSDN Bibliothek.

Beispiel

#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(($MB_ICONERROR + $MB_SYSTEMMODAL), 'Fehler', 'Erfordert Windows Vista oder höher.')
    Exit
EndIf

Global $g_iCount = 10

Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), 300, 100)
Local $idLabel = GUICtrlCreateLabel('Die Anwendung wird crashen nach ' & $g_iCount & ' Sekunden.', 10, 43, 280, 14, $SS_CENTER)
GUISetState(@SW_SHOW)

If $CmdLine[0] And ($CmdLine[1] = '/crash') Then
    MsgBox(($MB_ICONWARNING + $MB_SYSTEMMODAL), 'Achtung', 'Die Anwendung wurde neu gestartet nach unnormalem Beenden.', 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, 'Die Anwendung wird crashen nach ' & $g_iCount & ' Sekunden.')
    Else
        Local $tData
        ; Forced script crash due to a memory access violation
        $tData = DllStructCreate('int', 0x12345678)
        $iData = DllStructGetData($tData, 1)
    EndIf
EndFunc   ;==>_Countdown