Script hängt sich alle paar Tage auf =(

  • Hallo Community!

    Ich habe hier ein Script welche zwar läuft aber nach 4-5 Tagen mit einer Fehlermeldung sich aufhängt.

    Die Fehlermeldung habe ich grade leider nicht zu Hand werde sie aber nachreichen.


    Viellecht erkennt ja einer von euch woran es liegen könnte.

    Leider ist es für euch schwer das Script zu testen da das Script datenbankgestüzt ist.

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon

    [/autoit] [autoit][/autoit] [autoit]

    #include <Array.au3>
    #include <MySQL.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $objErr = ObjEvent("AutoIt.Error", "MyErrFunc")

    [/autoit] [autoit][/autoit] [autoit]

    Dim $oldOnline[1]
    Dim $newOnline[1]

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    TCPStartup()

    [/autoit] [autoit][/autoit] [autoit]

    If RegRead('HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers', 'MySQL ODBC 3.51 Driver') <> 'Installed' Then
    MsgBox(0, 'Treiber', 'Der Treiber, der benöigt wird um eine Datenbankverbindung herzustellen, fehlt!')
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $ini_read = 'ihk-emden'
    _status()
    $sql = _MySQLConnect("user", "pass", "db", "ip")
    _Query($sql, "TRUNCATE users")
    For $i = 1 To UBound($newOnline) - 1
    _Query($sql, "INSERT INTO users (pcname, MAC, scan_time) VALUE ('" & $newOnline[$i] & "', '" & _arp(TCPNameToIP($newOnline[$i])) & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "')")
    Next
    _MySQLEnd($sql)
    Sleep(120000)
    WEnd
    TCPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    Func check_online()
    ;By GtaSpider
    Local $stdBuffer, $sreBuffer
    $Pid = Run(@ComSpec & ' /c net view /DOMAIN:' & $ini_read, '', @SW_HIDE, 2 + 4)
    While Not @error
    $stdBuffer &= StdoutRead($Pid)
    WEnd
    $sreBuffer = StringRegExp($stdBuffer, "\\\\([a-zA-Z0-9-_]*)", 3)
    $usre = UBound($sreBuffer)
    ReDim $sreBuffer[$usre + 1]
    _ArrayPush($sreBuffer, $usre, 1)
    ProcessClose($Pid)
    Return $sreBuffer
    EndFunc ;==>check_online

    [/autoit] [autoit][/autoit] [autoit]

    Func _arp($pcip)
    If $pcip = @IPAddress1 Then
    Return _GetMACFromIP()
    Else
    $Pid = Run(@ComSpec & " /c arp -a " & $pcip, "", "", 2)
    $ausgabe = StdoutRead($Pid)
    While ProcessExists($Pid)
    Sleep(100)
    WEnd
    $return = StringMid($ausgabe, StringInStr($ausgabe, "-", 0, -5) - 2, 17)
    Return StringReplace($return, "-", ":")
    EndIf
    EndFunc ;==>_arp

    [/autoit] [autoit][/autoit] [autoit]

    Func _status()
    ReDim $oldOnline[1]
    ReDim $newOnline[1]
    ;//DB List
    $sql = _MySQLConnect("user", "pass", "db", "ip")
    $oUer = _Query($sql, "SELECT pcname FROM users;")
    With $oUer
    While Not .EOF
    _ArrayAdd($oldOnline, .Fields("pcname" ).value)
    .MoveNext
    WEnd
    EndWith
    _MySQLEnd($sql)
    ;//NetView
    $pcs = check_online()
    For $i = 1 To $pcs[0]
    If Ping($pcs[$i]) > 0 Then
    _ArrayAdd($newOnline, $pcs[$i])
    EndIf
    Next
    For $i = 1 To UBound($newOnline) - 1
    If _ArraySearch($oldOnline, $newOnline[$i]) = -1 Then
    $sql = _MySQLConnect("user", "pass", "db", "ip")
    _Query($sql, "INSERT INTO log (DATE, TIME, EVENT, USER) VALUE ('" & @MDAY & "." & @MON & "." & @YEAR & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "', 'Online: " & $newOnline[$i] & "' , 'Scan');")
    _Query($sql, "UPDATE profile SET LastLogin='" & @MDAY & "." & @MON & "." & @YEAR & "', Status='On' WHERE pcname='" & $newOnline[$i] & "';")
    _MySQLEnd($sql)
    EndIf
    Next
    For $i = 1 To UBound($oldOnline) - 1
    If _ArraySearch($newOnline, $oldOnline[$i]) = -1 Then
    $sql = _MySQLConnect("user", "pass", "db", "ip")
    _Query($sql, "INSERT INTO log (DATE, TIME, EVENT, USER) VALUE ('" & @MDAY & "." & @MON & "." & @YEAR & "', '" & @HOUR & ":" & @MIN & ":" & @SEC & "', 'Offline: " & $oldOnline[$i] & "' , 'Scan');")
    _Query($sql, "UPDATE profile SET Status='Off' WHERE pcname='" & $oldOnline[$i] & "';")
    _MySQLEnd($sql)
    EndIf
    Next
    EndFunc ;==>_status

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMACFromIP($sIP = @IPAddress1, $mode = 1)
    Local $xMac, $xMACSize
    Local $i, $s, $r, $xIP
    $xMac = DllStructCreate("byte[6]")
    $xMACSize = DllStructCreate("int")
    DllStructSetData($xMACSize, 1, 6)
    $r = DllCall("Ws2_32.dll", "int", "inet_addr", _
    "str", $sIP)
    $xIP = $r[0]
    $r = DllCall("iphlpapi.dll", "int", "SendARP", "int", $xIP, "int", 0, "ptr", DllStructGetPtr($xMac), "ptr", DllStructGetPtr($xMACSize))
    $s = ""
    If $mode = 0 Then
    For $i = 0 To 5
    $s &= Hex(DllStructGetData($xMac, 1, $i + 1), 2)
    Next
    ElseIf $mode = 1 Then
    For $i = 0 To 5
    If $i Then $s = $s & ":"
    $s = $s & Hex(DllStructGetData($xMac, 1, $i + 1), 2)
    Next
    ElseIf $mode = 2 Then
    For $i = 0 To 5
    If $i Then $s = $s & "-"
    $s = $s & Hex(DllStructGetData($xMac, 1, $i + 1), 2)
    Next
    EndIf
    Return $s
    EndFunc ;==>_GetMACFromIP

    [/autoit] [autoit][/autoit] [autoit]

    Func MyErrFunc()

    [/autoit] [autoit][/autoit] [autoit]

    $hexnum = Hex($objErr.number, 8)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "", "We intercepted a COM Error!!" & @CRLF & @CRLF & _
    "err.description is: " & $objErr.description & @CRLF & _
    "err.windescription is: " & $objErr.windescription & @CRLF & _
    "err.lastdllerror is: " & $objErr.lastdllerror & @CRLF & _
    "err.scriptline is: " & $objErr.scriptline & @CRLF & _
    "err.number is: " & $hexnum & @CRLF & _
    "err.source is: " & $objErr.source & @CRLF _
    )
    $cSql = 0
    TCPSend($CLIENTSOCKET, '~exit')
    Sleep(200)
    Exit
    EndFunc ;==>MyErrFunc

    [/autoit]

    Ich hoffe es kann mir jemand helfen.

    Mfg Aiden

    bernd670: AutoIt-Tag's eingefügt!
    bernd670: Zeile 25 erzeugt beim Highlighting noch einen Fehler! Vorübergehend auskommentiert!
    bernd670: Fehler behoben!

    4 Mal editiert, zuletzt von bernd670 (7. Dezember 2007 um 08:21)