Registriert die aktive Instanz einer Anwendung für einen Neustart
#include <WinAPIDiag.au3>
_WinAPI_RegisterApplicationRestart ( [$iFlags = 0 [, $sCmd = '']] )
$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. |
Erfolg: | 1. |
Fehler: | 0 und setzt @error Flag ungleich Null, @extended Flag kann den HRESULT Fehlercode enthalten. |
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.
Suche nach RegisterApplicationRestart in der MSDN Bibliothek.
#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