Hallo,
hat man bei AutoIt die Möglichkeit bei einem Scriptfehler noch eine letzte Funktion aufzurufen? Also ungefähr so was wie
[autoit]Opt("OnAutoItError", "FehlerFunktionBzwMeldung")
[/autoit]Hallo,
hat man bei AutoIt die Möglichkeit bei einem Scriptfehler noch eine letzte Funktion aufzurufen? Also ungefähr so was wie
[autoit]Opt("OnAutoItError", "FehlerFunktionBzwMeldung")
[/autoit]Naja, ich weis nicht obs ses gibt, aber wenn ein Fehler auftritt, wie soll der dann noch weiter rechnen/arbeiten.
Das ist doch wie wenn ich meinem Rechner den Stecker ziehe(ohne Akku) und er läuft noch solang bis er fertig gerechnet hat,oder? ![]()
ZitatNaja, ich weis nicht obs ses gibt, aber wenn ein Fehler auftritt, wie soll der dann noch weiter rechnen/arbeiten.
Das ist doch wie wenn ich meinem Rechner den Stecker ziehe(ohne Akku) und er läuft noch solang bis er fertig gerechnet hat,oder?
Ne nicht direkt. Da AutoIt "nur" eine Interpretersprache ist, beendet der Interpreter sozusagen das Script. Es ist aber bestimmt möglich, das der Interpreter kurz davor eine Funktion ausführen kann. Schließlich wird bei einem Fehler auch ein Dialog mit dem Fehler angezeigt ![]()
Edit: Meine Idee war, das bei einem Fehler ein anders Script ausgeführt wird, das den Fehler "analysiert" und überprüft, woran das liegen kann.
Mhm, stimmt...sorry, nimm alles zurück ![]()
OnAutoItExitRegister("Test")
$Result =StringSplit("1|2|3|4","|")
For $i= 1 To 10
ConsoleWrite($Result[$i] & @CRLF)
Next
Func Test()
MsgBox(0,"Fehler","Fehler oder Programmende")
EndFunc
Das Script compilieren und ausführen. Die Funktion Test wird erst nach der Ausgabe des Fehlers aufgerufen oder bei regulärem Programmende.
Ich hab gerade zufällig was gefunden ![]()
Script ist von MrCreatoR
http://www.autoitscript.com/forum/index.php?showtopic=79879&st=0&p=575411&#entry575411
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Run_AU3Check=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.2.0
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_AutoItErrorHandler()
[/autoit] [autoit][/autoit] [autoit]MsgBox(0,"","")
[/autoit] [autoit][/autoit] [autoit]MsgBox(0, "" ;This is meant to produce an error !
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _AutoItErrorHandler()
If StringInStr($CmdLineRaw, "/AutoIt3ExecuteScript") Then Return
Local $sErrorMsg = ""
Local $sRunLine = @AutoItExe & ' /ErrorStdOut /AutoIt3ExecuteScript "' & @ScriptFullPath & '"'
Local $iPID = Run($sRunLine, @ScriptDir, 0, 2 + 4)
ProcessWait($iPID)
While 1
$sErrorMsg &= StdoutRead($iPID)
If @error Then ExitLoop
Sleep(1)
WEnd
If $sErrorMsg = "" Then Exit
[/autoit] [autoit][/autoit] [autoit]MsgBox(262144+48, "AutoIt3 Error Message", _
StringFormat("Program Terminated <%s>.\n\nError Message:\n\n%s\n\n" & _
"Please report about this bug to the author, sory for the inconvenience!
", @ScriptName, $sErrorMsg))
Exit
EndFunc
Edit: Nun Nachteil bei dieser Lösung ist, dass 2 Prozesse von einem Script laufen. ![]()
Wie wäre es mit
[autoit]
If @error Then
...
EndIf
Müsstest Du halt quasie nach jeder Funktion einbauen um Fehler abzufangen. Von so einer Art allgemeiner Option wüsste ich jetzt auch nix.
Schwerwiegende Fehler, wie etwa Array out of bounds sollten in einem fertigen Skript gar nicht mehr auftreten. Dazu muss man nur umsichtig programmieren und Fehlerabfragen einbauen, etwa ein If @error oder If IsArray. Wird das Konsequent durchgezogen, sollte der Endanwender keine AutoIt-internen Fehlermeldungen mehr sehen ![]()