Memory-Probleme in Skript

  • Hallo Miteinander,

    nach langer Zeit muss ich mich auch mal wieder hier melden weil ich keine Lösung mehr finde. Bisher hat die Weiterentwicklung meines Skripts super geklappt aber jetzt habe ich seltsames Phänomen:

    Mein Skript (siehe Anhang) lief bis vor einer Woche ohne Probleme und war bei uns in der Firma im Einsatz. Ohne jetzt irgendwas geändert zu haben funktioniert es auf einmal nicht mehr und es kommt eine Zugriffsverletzung im Speicher siehe Bild:

    [Blockierte Grafik: http://www.cc-bark.de/it/error.jpg]

    Diese Meldung kommt immer und das Programm stürzt ab. Seltsamerweise funktioniert es ab und zu - in seltenen Fällen wenn ich eine StringReplace-Anweisung auskommentiere. Manchmal hilft aber auch das nicht.
    Kann das evtl. an einem Windows-Update liegen, welches in gewisser Weise einen Speicherbereich schützt? Seltsam ist nur die Adressierung, weil es diesen 0x0000000 ja eigentlich nicht gibt.

    Mir ist bewusst, dass das wohl ein Programmierfehler meinerseits ist aber ich werde aus der Meldung sowie auch aus dem AutoIT-Exit-Code (-1073741819) nicht schlau.

    Jemand eine Idee?

    Wäre super.
    Vielen Dank.

    MfG,
    Towacom

    Skriptdatei: Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.


    [EDIT]Die Lizenzangaben im Skript sind nur Dummy-Lizenzschlüssel aus der alten Keyabfrage. Im eigentlichen Skript sieht diese anders aus also is das ok wenn diese gelesen wird ;-)[/EDIT]

    2 Mal editiert, zuletzt von Towacom (27. September 2010 um 14:10)

    • Offizieller Beitrag

    Hi,
    dei Code weist für mich nichts Auffälliges aus.
    Kleiner Schönheitsfehler evtl. das hier:

    Spoiler anzeigen
    [autoit]

    ;~ ******************** Group waste reasons ********************

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

    For $i = 0 To 10
    $agType[$i] = Eval('G' & $i + 1)
    $str_agType &= Eval('G' & $i + 1)
    $str_agType &= '|'
    Next
    ;################################################################################################################################
    ; Hier endet $str_agType mit '|' - ist das gewollt? erzeugt ein Leerelement in der Combo-Liste
    ; sonst: $str_agType = StringTrimRight($str_agType, 1)
    ;################################################################################################################################

    [/autoit]

    Ist jetzt etwas schwer zu sagen, woher der Fehler kommt. Wann tritt er denn auf? Direkt beim Programmstart oder wenn in die DB geschrieben werden soll?
    Falls beim Schreiben in die DB, dann implementiere mal den AutoIt-Object-Error-Handler und logge die Events.
    Anderenfalls bleibt dir wohl nix anderes übrig, als hinter jede relevante Programmzeile ein:

    [autoit]

    If @error Then _FileWriteLog($Logfile, @ScriptLineNumber)

    [/autoit]

    zu setzen.

  • Moin,

    wir hatten ähnliches Problem, aber mit einer SAP Anwendung. Das Problem tauchte nur auf WinXP auf. User waren Hauptbenutzer auf den Maschinen. Das Problem war kein flächendeckendes, liess sich aber bei den Problemfällen wie folgt beheben:

    Anmeldung als Admin -> starten des Programms, alles i.O für Hauptbenutzer.

    Gffs. ein Ansatz, ohne das Skript auf mögliche Fehler zu durchforsten.

    Good Luck

    Stefan

  • Vielen Dank schonmal Euch zwei.

    Ojos Idee trifft hier leider nicht zu da ich selbst Admin am Rechner bin und die drei anderen User nur Hauptbenutzer - haben aber alle das selbe Problem - auch ich als Computeradministrator.

    Ich werde mal BugFix's Idee versuchen mit dem Error-Handler in der Hoffnung etwas zu finden.

    [EDIT]Achso und @ BugFix: Der Fehler kommt vor dem Schreiben in die DB - also in der _read()-Funktion. Bis dahin läuft alles und in der Datenbank kommt nichts an - von dem her denke ich, dass der Fehler beim Auslesen auftreten muss.[/EDIT]

    Sollte ich etwas finden poste ich es natürlich - bis dahin bin ich für jede weitere Idee dankbar.

  • Es ist jetzt mühselig sich durch den Code zu debuggen.
    Zwei Sachen die die Ursache sein könnten.

    1. Deine Ini Datei ist größer als die Größenbeschränkung von AutoIt (ich glaube die liegt bei 64kb)
    2. Dein "ADODB.Connection" läuft nicht richtig bzw. ist nicht richtig Parametriert, was zu einem Speicherfehler führen würde)


    Nach einigem recherchieren nach Deiner Fehlermeldung erhärtet sich mein Verdacht darauf (Punkt 2)
    Kann wirklich an dem Sp2 von Windows liegen:

    Zitat


    Und zwar liegt es an der DEP funktion von Win XP SP2!

    "alte", vom microsoft als unsauber geschrieben erachtete software kann unter
    Win XP SP 2 nicht mehr so ohne weiteres ausgeführt werden. Es werden
    Fehlermeldungen kommen wie "written" konnte nicht auf
    dem Speicher durgeführt werden“, Unknown Software Exception..."

    Ref:http://www.tech-archive.net/Archive/German…1/msg00977.html

  • Hm ok dann werd ich das mal durchchecken - irgendwo muss ja ein Fehler sein denn es wäre echt sch*** wenn das auf einmal nimmer funktioniert.


    Vielen Dank mal soweit - ich werde mal "ausholzen" gehn ;) Sag Euch Bescheid wenn ich was finde...


    Thx MfG,

    Towacom

  • Hallo Leute,
    ich glaube ich habe die Ursache gefunden - zwar hab ich noch keine Ahnung wie ich es beheben kann aber:
    Der Datenbankzugriff funktioniert lokal ohne Probleme - sobald ich aber auf eine Datenbank auf dem Netzwerk - auf einer Serverfreigabe zugreifen möchte kommt der Fehler obwohl ich alle Berechtigungen wie gehabt noch immer richtig gesetzt habe.
    Stelle ich den Datenbankpfad auf lokal um funktionierts ohne Probleme aber sobald ich ins Netz gehe hakts und ich weiß nich wie ich das umgehen bzw. lösen kann.
    Hierbei ists egal ob ich nen UNC habe oder ein gemaptes Laufwerk.
    Jemand schonmal von dem Problem gehört/gelesen?
    Schätze irgendein Windows-Update hat dem Datenbankzugriff über das Netzwerk nen Riegel vorgeschoben weil es einfach so aus heiterem Himmel nicht mehr funktioniert.
    Würde mich freuen wenn jemand weiß wie ich das umgehe.