FTP-Script läuft unter XP nicht

  • Hallo,

    ich habe folgendes Problem:

    Ich habe für eins meiner Programme ein UpdateScript geschrieben, was einer Datei auf 'nem FTP-Server die aktuellste Versionsnummer auslesen soll.
    Unter Win 7 (Win Vista kann ich nicht sagen) läuft das ganze Prima, jedoch passiert bei XP nichts.
    Da ich selber keinen XP-Rechner habe, kann ich dass nicht nachvollziehen, vielleicht könnte einer von Euch mir helfen.


    Source:

    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>
    #include<String.au3>

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

    $SERVER = "server"
    $USERNAME = "user"
    $PASS = "pw"
    $OPEN = _FTP_OPEN("FTP")
    $CONN = _FTP_CONNECT($OPEN, $SERVER, $USERNAME, $PASS)
    $FILE = _FTP_FILEOPEN($CONN, "version.txt", $GENERIC_READ, $INTERNET_FLAG_TRANSFER_ASCII)
    $READ = _FTP_FILEREAD($FILE, 2048)
    _FTP_CLOSE($OPEN)
    $HEX2STRING = _HEXTOSTRING($READ)
    ConsoleWrite($HEX2STRING & @CRLF)
    $LOCVERS = IniRead("version.ini", "Version", "Version", "Coudln't find value")
    If $LOCVERS < $HEX2STRING Then
    HTTPSETUSERAGENT("irgendwasanderes")
    $HDOWNLOAD = InetGet("server\bin\" & $HEX2STRING & "\program.exe", @ScriptDir & "\program.exe", 1, 1)
    TrayTip("Programm: Update wird durchgeführt...", "Die neuste Version wird gedownloadet...", 5, 1)
    Do
    Sleep(250)
    Until INETGETINFO($HDOWNLOAD, 2)
    Local $ADATA = INETGETINFO($HDOWNLOAD)
    INETCLOSE($HDOWNLOAD)
    If $ADATA[3] = True Then
    IniWrite("version.ini", "Version", "Version", $HEX2STRING)
    Run("program.exe")
    ElseIf $ADATA[3] = False Then
    TrayTip("Leert einen Traytip", "", 0)
    TrayTip("Update Fehlgeschlagen!", "Konnte Datei nicht runterladen. Später nocheinmal probieren.", 5, 1)
    Sleep(5000)
    EndIf
    EndIf

    [/autoit]

    Etwaige Fehler sollten nur durch entfernen der persönlichen Daten passiert sein.

    Grüße

  • Hallo mietzekatze,

    du bist zwar schon ein paar Tage dabei, aber dies ist mein 1. Post in einem deiner Threads also:

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinem Problem: ich habe dein Skript (mit meinen Zugangsdaten bei bplaced.net) getestet soweit das (ohne Zugrif auf deinen WebSpace) fmöglich ist, sprich bis zu ConsoleWrite läuft das Skript ohne Probleme

    mfg atoBert

    Einmal editiert, zuletzt von autoBert (2. März 2011 um 22:14)

  • Da du leider nicht genauer sagen kannst was nicht geht rate ich mal was alles schiefgehen könnte:

    1. Der Benutzer setzt eine Softwarefirewall oder Antiviren Lösung ein die verhindert, dass dein Script eine Internetverbindung aufbaut.
    2. Eine Antivirenlösung verhindert den Download von .exe Dateien.
    3. Dein Script oder auch die "program.exe" wurden für 64bit Systeme kompiliert und sind nich in 32bit Umgebungen lauffähig.
    4. Dein Script macht prinzipiell nichts wenn die if abfrage in Zeile 16 aus welchen Gründen auch immer ein False liefert.

    Um den Fehler also zufinden solltest du ggf eine debug Version deines Updatescripts erstellen die bei allen relevanten Punkten eine Rückmeldung an den Benutzer gibt. Da der Benutzer damit vielleicht nicht viel anfangen kann könntest du auch ein Logfile erzeugen das man dir dann zukommen lassen kann. Dadurch siehst du dann welche Werte die einzelnen Variablen hatten und an welchen Stellen es zu Fehlercodes kam.

    EDIT: Du könntest mal noch den Passivmodus für die FTP Verbindung versuchen.

  • Ok. Hat sich erledigt :rolleyes:

    Jetz noch eine Letzte Frage:

    Warum funktioniert das hier nicht?

    Code:

    Spoiler anzeigen
    [autoit]

    $log=FileOpen("datei.txt",1)
    FileWrite($log,"["&@HOUR&":"&@MIN&" - "&@MDAY&"."&@MON&"."&@YEAR&"]"&" --> "&$name&@CRLF)
    $SERVER = "name.server.endung"
    $USERNAME = "user"
    $PASS = "********"
    $OPEN = _FTP_OPEN("FTP")
    $CONN = _FTP_CONNECT($OPEN, $SERVER, $USERNAME, $PASS)
    $debug_Home=_FTP_DirSetCurrent($CONN,"Ordner/log")
    $debug_Dir=_FTP_DirCreate($CONN,$name)
    $debug_file=_FTP_FilePut($CONN,"/datei.txt","datei.txt",$INTERNET_FLAG_TRANSFER_BINARY)

    [/autoit]

    Bis Zeile 9 geht alles klar, nur kann er die Datei nicht auf den Server schieben.
    Includes sind drinne.

    Fehler in der Syntax sehe ich nich...

  • _FTP_FilePut($CONN,"/datei.txt","datei.txt",$INTERNET_FLAG_TRANSFER_BINARY)

    1. Der Slash vor datei.txt ist unnötig.
    2. $INTERNET_FLAG_TRANSFER_BINARY <- warum? Das ist Standard

    EDIT:

    Sehe gerade Zeile 9 ist $debug_Dir=_FTP_DirCreate($CONN,$name)
    wie sieht $name denn aus??

    21 is only half the truth.

    Einmal editiert, zuletzt von Mahagon (7. März 2011 um 22:01)

  • _FTP_FilePut($CONN,"/datei.txt","datei.txt",$INTERNET_FLAG_TRANSFER_BINARY)

    1. Der Slash vor datei.txt ist unnötig.
    2. $INTERNET_FLAG_TRANSFER_BINARY <- warum? Das ist Standard

    Auch ohne funktionierts nich. Bekomm als @error immer -1...
    $INTERNET_FLAG_TRANSFER_BINARY hab ich einfach so aus Verzweiflung gesetzt.

  • Die Rechte zum schreiben hast du ja denke ich mal ;)
    Schreib mal probehalber vor der lokalen Datei den vollständigen Pfad bzw @scriptdir o.ä.
    Habe gerade leider keinen ftp zum testen ^^

    21 is only half the truth.


  • Schreib mal probehalber vor der lokalen Datei den vollständigen Pfad bzw @scriptdir o.ä.
    Habe gerade leider keinen ftp zum testen ^^

    Also Rechte hab ich. Is'n Server bei bplaced.
    @ScriptDir hatte ich auch schon, funktioniert ebenfalls nicht...

  • Hast du die Reihenfolge der Parameter beachtet? Erst kommt die Quelldatei dann das Ziel ;)

  • Hast du die Reihenfolge der Parameter beachtet? Erst kommt die Quelldatei dann das Ziel ;)

    Ja, denk schon.
    Is ja eigentlich auch egal, wenn beides dasselbe ist, oder nicht?

  • /datei.txt sucht im Hauptverzeichnis der aktuellen Festplatte. Also "/datei.txt" ist das gleiche wie StringLeft(@WorkingDirectory, 2) & "\datei.txt"
    Daher wird die Datei vermutlich nicht gefunden...

  • /datei.txt sucht im Hauptverzeichnis der aktuellen Festplatte. Also "/datei.txt" ist das gleiche wie StringLeft(@WorkingDirectory, 2) & "\datei.txt"
    Daher wird die Datei vermutlich nicht gefunden...

    Auch mit kompletten Dateipfad klappts nich...

  • Hallo Mietzekatze,

    dein grösster Fehler ist dass du die Datei zwar mit FileOpen öffnest aber dieses FileHandle nie mehr schliesst. Desweiteren versuchtst du einen Dateipfad anzulegen hast aber der Variablen $name keinen Inhalt zugeordnet,

    mfg autoBert

  • Hallo Mietzekatze,
    dein grösster Fehler ist dass du die Datei zwar mit FileOpen öffnest aber dieses FileHandle nie mehr schliesst. Desweiteren versuchtst du einen Dateipfad anzulegen hast aber der Variablen $name keinen Inhalt zugeordnet,

    Wenn ich das Filehandle schliesse, dann klappts auch nich.
    Dann braucht er nur ewig bei _FTP_FilePut, gibt mir dann aber doch nur ein Error zurück.

    $name is in nem Codeschnipsel davor definiert, und funktioniert soweit auch.
    Das einzige Problem is eben, dass er die Datei nich auf den Webspace kopieren will...

  • Zitat

    Hast du die Reihenfolge der Parameter beachtet? Erst kommt die Quelldatei dann das Ziel ;)

    Ja, denk schon.
    Is ja eigentlich auch egal, wenn beides dasselbe ist, oder nicht?

    Wie soll das denn das Gleiche sein? Das eine ist nen lokaler Pfad un das andere ne Url von / und \ mal abgesehen.


    Warum biegst Du auf Unetget ab wenn Du schon mit FTP angefangen bist? Bzw. / \

    Apropos URL :

    [autoit]

    InetGet ( "URL" [,"filename" [, options [, background]]] )

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

    InetGet("server\bin\" & $HEX2STRING & "\program.exe", @ScriptDir & "\program.exe", 1, 1)

    [/autoit]


    Du hast eine lustige url muss das nicht mit ftp. www. kurt weiß.der.geier.de beginnen.

    Gruß Dietmar

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (8. März 2011 um 17:37)

  • Wenn ich das Filehandle schliesse, dann klappts auch nich.
    Dann braucht er nur ewig bei _FTP_FilePut, gibt mir dann aber doch nur ein Error zurück.


    Das Filehandle der lokalen Datei muss vor dem hochladen geschlossen werden. So klappt's:

    [autoit]

    #include <FtpEx.au3>

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

    $name = "Test" ;<=== Ordnername hat auch noch gefehlt
    $log=FileOpen("datei.txt",1)
    FileWrite($log,"["&@HOUR&":"&@MIN&" - "&@MDAY&"."&@MON&"."&@YEAR&"]"&" --> "&$name&@CRLF)
    FileClose($log)
    $server = 'user.bplaced.net'
    $username = "user"
    $pass ="0815"
    $OPEN = _FTP_OPEN("FTP")
    $CONN = _FTP_CONNECT($OPEN, $SERVER, $USERNAME, $PASS)
    $debug_Home=_FTP_DirSetCurrent($CONN,"/")
    $debug_Dir=_FTP_DirCreate($CONN,$name)
    _FTP_DirSetCurrent($CONN,"/" & $name)
    $debug_file=_FTP_FilePut($CONN,@ScriptDir& "\datei.txt","datei.txt")

    [/autoit]

    mfg autoBert

  • Funktioniert ebenfalls nicht.
    Mein Script sieht mittlerweile so aus:

    Spoiler anzeigen
    [autoit]

    $name = IniRead("version.ini","Name","Name","Kein Name") ;<=== Hier kommt der Name her
    If $name = "Kein Name" Then
    $inputName=InputBox("Bitte Namen eingeben","Bitte gib deinen Namen ein:")
    IniWrite("version.ini", "Name","Name",$inputName)
    $name=$inputName
    EndIf
    ConsoleWrite("Name: "&$name&@CRLF)
    $log=FileOpen("con_log.txt",1)
    ConsoleWrite("Datei: "&$log&@CRLF)
    FileWrite($log,"["&@HOUR&":"&@MIN&" - "&@MDAY&"."&@MON&"."&@YEAR&"]"&" --> "&$name&@CRLF)
    FileClose($log)
    $SERVER = "user.bplaced.net"
    $USERNAME = "user"
    $PASS = "passwort"
    $OPEN = _FTP_OPEN("FTP")
    ConsoleWrite("Handle: "&$OPEN&@CRLF)
    $CONN = _FTP_CONNECT($OPEN, $SERVER, $USERNAME, $PASS)
    ConsoleWrite("Identifier: "&$CONN&@CRLF)
    $debug_Home=_FTP_DirSetCurrent($CONN,"deposer/log")
    ConsoleWrite("Heimatverzeichnis gewechselt: "&$debug_Home&@CRLF)
    $debug_Dir=_FTP_DirCreate($CONN,$name)
    ConsoleWrite("Ordner erstellt: "&$debug_Dir&@CRLF)
    $debug_home2=_FTP_DirSetCurrent($CONN,$name)
    ConsoleWrite("Ins Userverzeichnis gewechselt: "&$debug_home2&@CRLF)
    $debug_file=_FTP_FilePut($CONN,@ScriptDir& "\con_log.txt","con_log.txt")
    ConsoleWrite("Datei kopiert: "&$debug_file&@CRLF&"@ERROR: "&@error&@CRLF)

    [/autoit]

    Und das gibt die Console dann aus:

    Spoiler anzeigen


    Name: Test
    Datei: 1
    Handle: 0x00CC0004
    Identifier: 0x00CC0008
    Heimatverzeichnis: 1
    Ins Userverzeichnis gewechselt: 1
    Ordner erstellt: 0 ;<==== Weil Ordner schon existiert
    Datei kopiert: 0
    @ERROR: -1

    Also $name ist definiert, Handle wird geschlossen. Woran kanns jetz noch liegen, dass er es nicht hochlädt?
    Bzw. gibts Alternativen zum Hochladen?

    //Edit: Hatte vergessen datei.txt in con_log.txt umzubenennen. :rolleyes: Löst aber leider auch nich das Problem. Das einzige was sich ändert, is das der Script statt ca. 2 Sekunden jetz knapp 30 Sekunden braucht, und den großteil davon bei dem Part wo er die Datei hochladen soll.

    Einmal editiert, zuletzt von mietzekatze (9. März 2011 um 13:55)

  • Du hast eine lustige url muss das nicht mit ftp. www. kurt weiß.der.geier.de beginnen.

    Ja, hab die echte aber rausgenommen, weil ich nich will, dass jeder auf den Server kommt, da es, teilweise, "private" Sachen sind.

  • dann sollte es aber trotzdem noch webkonform aussehen, damit man nicht auf so komische Gedanken kommt.
    Es soll ja Leute geben die nicht wissen was ftp ist. Ansonsten kann man die Leute die es kennen und die anderen schlecht auseinanderhalten. :)


    ftp://ftp.web.de
    Protokoll://alias.Domain.de

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o