Fehlermeldung nur bei Start von Windows?

  • Hallo zusammen,

    ich habe mir ein Programm gebastelt das soweit ohne Probleme funktioniert. Jetzt habe ich eine Autostart funktion eingebaut das beim Start von Windows das Programm mit startet. Da bekomme ich dann auch die Fehlermeldung und auch nur da. Die Fehlermeldung lautet:

    Line 10550 (File "C:\test\test.exe"):

    Error: Subscript used with non-Array variable.

    Was mich wundert ist die Line angabe da mein Script nur 565 Zeilen hat. Und selbst die Includes da ist keine dabei die über 5000 Zeilen kommt. Hat irgend jemand eine Idee wo das her kommen könnte? Da ich nicht den ganzen Code hier posten möchte hier nur mal die Includes denk mal da wird es eventuell klemmen.

    [autoit]


    #include <ButtonConstants.au3>
    #include <GuiButton.au3>
    #include <Constants.au3>
    #include <Date.au3>
    #include <GUIConstantsEx.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <OutlookEx.au3>
    #include <Array.au3>
    #include <INet.au3>
    #include <Misc.au3>

    [/autoit]

    Frage wäre was steht beim Windows Start nicht zur verfügung was den Fehler verursacht?

    Bin für jede Idee oder Tipp dankbar.

    Gruß DevFly

    Einmal editiert, zuletzt von DevFly (10. Januar 2013 um 17:49)

  • Zu dem Fehler kann ich nicht viel sagen, da liegt das Problem halt iwo im Script begraben.
    Dass die Zeilennummer so hoch ist liegt schon and den Includes, beim Kompilieren wird vorher Alles aus den includes und dein script in eine einzelne datei geschrieben...

    Das wäre eine möglichkeit, die "echte" Fehlerzeiche zu finden:
    Alle Includes per Hand (inklusive deren Includes rekursiv (auf #Include-Once achten!)) in dein Script kopieren, das ganze Kompilieren und damit Testen... die Zeilennummer die dir dann ausgespuckt wird ist auch in deinem Script die Fehlerquelle und du kannst u.U. den Fehler beheben ;)

  • Du könntest evtl den Fehler abfangen, indem du vor jedem 1. Zugriff auf ein Array nachprüfst, ob das Array existiert.
    Also in der Art von "if not IsArray ($dings) then Fehlermeldung()"
    Die fehlerhafte Zeilennummer ist natürlich saublöd... eigentlich ein Bug in autoIt.
    Besonders verdächtig ist "inet.au3", weil beim Neustart die Internetverbindung nicht unbedingt sofort da ist.
    Ein billiger Trick, damit das Script trotzdem läuft, wäre ein schlichtes "Sleep(paar tausend millisekunden) am Anfang.

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Problematisch wird das ganze nur wenn der Fehler nicht in seinem Script sondern in einem der Includes auftritt...
    klar könnte er auch diese Methodik in den Includes implementieren, aber dann steht halt eher die Frage des Aufwand/Nutzen-Verhältnisses im Raum :D

  • Problematisch wird das ganze nur wenn der Fehler nicht in seinem Script sondern in einem der Includes auftritt...
    klar könnte er auch diese Methodik in den Includes implementieren, aber dann steht halt eher die Frage des Aufwand/Nutzen-Verhältnisses im Raum :D


    Immerhin würden damit die Includes zuverlässiger, weil ja dann Fehler abgefangen werden. :D

    Wer andern eine Bratwurst brät
    der hat ein Bratwurstbratgerät.

  • Habs hinbekommen. Es war kein Fehler in den includes. Wer den Fehler auch mal hat und nicht ständig neustarten will oder die richtige zeile ermitteln will. kann ein Fehler produzieren so hab ich es gemacht einfach ein:

    [autoit]

    Global $testvari[0]

    [/autoit]

    Diese einfügen Kompilern Script starten dann weiß man zumindest wo man gerade ist und kann so mit etwas Rechnen die Position ermitteln wo der Fehler ist.

    Mein Fehler in Script war das ich ein paar mal ein _SQLite_QuerySingleRow gemacht habe aus dieser wird dann eine Array aus der angeben Variable erstellt. Dieser Array war aber nicht deklariert was den Fehler verursacht hat.

    Danke für eure Hilfe versuche.

    Gruß DevFly

  • Die Zeilennummer ermitteln geht am einfachsten bei mit Striponly OBFUSCATEDen EXEn. Dazu muss das Skript Name_Obfuscated.au3 natürlich aufbewahrt werden. Bei einer Fehlermeldung kann man dann einfach in Name_Obfuscated.au3 nachschauen, die angegebene Zeilennummer stimmt exakt.

    mfg autoBert

  • Da ich noch nicht mit OBFUSCATED gearbeitet habe hättest du mal ein Beispiel die Option beim Kompielern nur anzugeben wird es ja nicht sein oder?Gruß DevFly


    Zusätzlich muss naürlich auch ausgewäht werden, dass der Obfuscator vor dem Kompilieren gestartet wird, das ist alles.

    mfg autoBert