Zeilennummer in EXE suchen

  • Hallo zusammen,

    Bei folgendem Problem komme ich nicht mehr weiter.
    Ich habe ein Script, welches auf 27 PCs seit 3 Arbeitswochen jeweils täglich 4-5x ausgeführt wurde. Und immer lief es einwandfrei.
    Doch plötzlich bekommt ein Mitarbeiter die Fehlermeldung wie im Anhang.

    Um nun herauszufinden, welche Zeile das in meinem Script ist, nutze ich den Obfuscator mit den Optionen /cs=0 /cn=0 /cf=0 /cv=0 /sf=0 /sv=0.
    Dabei erhalte ich ein Obfuscated Script. Doch wenn ich darin auf die Zeile 4'827 gehe (+/- 10 Zeilen) habe ich nirgends eine Variable, geschweige denn eine Undeklarierte!

    Natürlich nutze ich in meinem Script

    [autoit]

    Opt("MustDeclareVars", 1)

    [/autoit]

    Leider ohne Erfolg. Ich finde in meinem Script keine undeklarierte Variable. (Auch nicht in den Includes)
    Und zudem lief dieses Programm ja ca. 1'800x in den letzten drei Wochen. Und immer ohne Fehler.

    Ich möchte nun nicht unbedingt mein Script hochladen, da ich eher einen allgemeinen Lösungsansatz suche.

    Vielen Dank für Eure Ideen!
    Veronesi

  • Lass doch mal Tidy drüberlaufen und stelle es vorher so ein, dass es eine Cross Reference erstellt.
    Da werden dann auch undeklarierte bzw. nicht verwendete Variablen angezeigt.
    Vielleicht bringt das was.

  • Hallo Water,

    danke für Deine Antwort.
    Ich habe es mal mit /sci 1 /gd /gds versucht.

    - Herausgekommen ist, dass alle @XYZ Makros "nicht deklariert" sind. (Also z.B. @IPAddress1 etc.) Ich denke, das ist unkritisch, oder?
    - Zudem sind tatsächlich einige Variablen nicht deklariert. Allerdings sind dies Parameter in der Funktionsübergabe. Diese müssen meines wissens nicht deklariert werden - oder?
    Also z.B.

    [autoit]

    Func _WriteToLogfile($Line, $Error, $ExtendedError, $Value)

    [/autoit]

    Und tatsächlich habe ich eine Variable gefunden, welche nicht deklariert ist: $objItem
    Ich nutze eine WMI Funktion um zu prüfen, ob das Netzwerk verbunden ist.
    Hoffe nun mal, dass es diese Variable gewesen ist.

    Vielen Dank!

  • Ach ja: Variablen wie $WS_EX_LAYERED werden auch als undeklariert dargestellt.
    Obwohl die ja in einem Include deklariert sind.

    Muss ich da was unternehmen, damit ich diese "Fehler" nicht mehr im TidyLog sehe?

  • Ja, alle #includes sind in den ersten Zeilen des Scriptes.
    Und ich habe ja auch keine Fehler wegen "nicht includierter Dateien". Trotzdem werden mir mit dem Tidy gewisse Variablen als nicht deklariert markiert. (Wie z.B. $WS_EX_LAYERED)

  • Hallo

    Lass es mich mal anders erklären.
    Nimm dieses Script:

    [autoit]

    #AutoIt3Wrapper_Run_Tidy=y
    #Tidy_Parameters=/sci 1 /gd /gds

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

    Opt("MustDeclareVars", 1) ;Must declare variables
    #include <WindowsConstants.au3>

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

    Global Enum $hGUI, $BtnOK, $BtnCancel, $BtnClose, $AnzahlGUI1
    Global $aGUI1[$AnzahlGUI1]

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

    $aGUI1[$hGUI] = GUICreate("test", 400, 400, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_TABSTOP, $WS_OVERLAPPEDWINDOW))

    [/autoit]

    Wie Du sehen kannst, sind alle Includes vorhanden und alle Variablen deklariert. (Sogar mehr als notwendig)
    Mit Ctrl+F5 bekomme ich auch keine Fehlermeldung.

    Wenn ich nun aber eine EXE erzeuge (F7) dann zeigt mir Tidy an, dass folgende Variablen nicht deklariert sind:

    • $WS_MAXIMIZEBOX
    • $WS_MINIMIZEBOX
    • $WS_OVERLAPPEDWINDOW
    • $WS_TABSTOP

    Diese sind aber sehr wohl deklariert, einfach in einer Include!
    Ich möchte gerne diese Fehler in Tidy wegbringen. (Natürlich ohne dass ich den ganzen Inhalt der Include ins Mainfile reinkopiere)

  • ???? OK???
    Wenn Du das obere Script ausführst und dann im vom Tidy geöffneten Editor nachsiehst, hast Du KEINE undeklarierten Variablen??????

    Bei mir sieht der untere Teil vom Tidy-Log so aus:

    #### indicates that this specific variable only occurs one time in the script.
    ---- indicates that this specific variable isn't declared with Dim/Local/Global/Const.

    == Variables ======================================================================================================
    Variable name Dim Used in Row(s)
    ========================= ===== ===================================================================================
    $AnzahlGUI1 00007 00008
    #### $BtnCancel 00007
    #### $BtnClose 00007
    #### $BtnOK 00007
    $WS_MAXIMIZEBOX ----- 00010
    $WS_MINIMIZEBOX ----- 00010
    $WS_OVERLAPPEDWINDOW ----- 00010
    $WS_TABSTOP ----- 00010
    $aGUI1 00008 00010
    $hGUI 00007 00010

  • Also, ich habe nun bei mir AutoIt nochmals komplett deinstalliert und (nach Neustart, man weiss ja nie) wieder installiert.
    Es ist wieder das gleiche!

    Auch auf einem neuen (virtuellen) Computer (Win7 x64) habe ich AutoIt kurz installiert. Auch dort bleiben die Fehler.

    Evtl. hast Du an Deiner Installation etwas verändert?
    Oder wurde mit OrganiceIncludes bei Dir etwas verändert, so dass die Fehler auch im "normalen" Tidy nicht mehr erscheinen?