Festplatte defekt oder InetGet Funktion verbuggt

  • Hallo,

    Habe mir einen Updater geschrieben, der die Versionsnummer des Programmes in einer TXT datei speichert. Jedoch will er diese Datei einfach nicht auf die Festplatte schreiben. Dies tritt immer nur bei diesem einem Script auf. Habe acuh schon ohne Variablen usw. Ich probiere schon seit Stunden herum, jedoch lässt sich die Datei durch AutoIt einfach nicht erstellen(nur manuell). Am Anfang des Scriptes wird die Locale versionsdatei erstellt und mit FileWriteLine die Versionsnummer, die dann mit FileClose geschlossen wird, jedoch wenn ich dann versuche die Locale Versionsdatei zu öffnen, steht dort: Auf die Datei wird gerade zugegriffen. Dann schließt sich der Edit

    Hier das Updater Script:

    Spoiler anzeigen
    [autoit]

    $servername = "www.int-tut.bplaced.net"
    $projektname = "filemanager/InteraktivesTutorial/updates"
    $exedatei = "InterTutorials_Gui.exe"
    $temp = @DocumentsCommonDir & "\temp"
    $update = MsgBox(52, "Updateassistent", "Das Programm wird sich mit dem Internet verbinden, um nach Updates zu suchen. Jetzt verbinden?")
    Select
    Case $update = 6
    If Not FileExists($temp) Then
    DirCreate(@DocumentsCommonDir & "\temp")
    EndIf
    ProgressOn("Updater", "Überprüfe, ob Server erreichbar ist...")
    Sleep(2000)
    If Ping($servername,250) Then
    ProgressSet(20, "Updater", "Verbunden!")
    Sleep(2000)
    Else
    ProgressOff()
    MsgBox(16,"FEHLER", "Das Update Modul hat einen Fehler abgefangen, Grund: der Server ist leider nicht erreichbar oder deine Internetverbindung ist nicht aktiviert.")
    Return
    EndIf
    ;Hier unten ist das Problem. Im öffentlichen Dokumenten Ordner und dem Unterordner Temp wird die Datei überhaupt nicht angezeigt
    InetGet("http://" & $servername & "/" & $projektname & "/version.txt", @DocumentsCommonDir & "\temp" & "\version.txt")
    If InetGet("http://" & $servername & "/" & $projektname & "/version.txt", @DocumentsCommonDir & "\temp" & "\version.txt") Then
    ProgressSet(40, "Updater", "Lade Update Info Datei herunter...")
    Sleep(2000)
    EndIf
    $downloaded = FileReadLine($temp & "\version.txt")
    $localversion = FileReadLine(@DocumentsCommonDir & "\version.txt")
    ProgressSet(60, "Updater", "Vergleiche Server Version mit local Version...")
    Sleep(2000)
    If $downloaded = $localversion Then
    ProgressOff()
    MsgBox(16, "Updater", "Keine neue Version vom Interaktivem Tutorial verfügbar")
    FileDelete($temp & "\version.txt")
    Return
    EndIf
    If $downloaded > $localversion Then
    ProgressSet(80, "Updater", "Lade neue Version herunter...")
    Sleep(2000)
    InetGet("http://" & $servername & "/" & $projektname & "/" & $exedatei, @DesktopDir & $exedatei)
    ProgressSet(90, "Updater", "Schließe Installation ab...")
    Sleep(2000)
    FileClose(@DocumentsCommonDir & "\version.txt")
    FileClose($temp & "\version.txt")
    ProgressSet(95, "Updater", "Aktualisiere Versionsdaten...")
    Sleep(1000)
    FileCopy($temp & "\version.txt", @DocumentsCommonDir & "\version.txt")
    ProgressSet(100, "Updater", "Lösche temporäre Dateien...")
    Sleep(1000)
    FileDelete($temp & "\version.txt")
    ProgressOff()
    MsgBox(64, "Updater", "Eine neue Version von " & $exedatei & " wurde installiert, das neue Programm befindet sich auf dem Desktop")

    EndIf

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

    Case $update = 7
    MsgBox(64, "Updateassistent", "Update verweigert")
    Return
    EndSelect
    EndFunc
    ;---->ENDE VON UPDATER

    [/autoit]
  • Hab deinen Code mal ein wenig umgeändert

    Spoiler anzeigen
    [autoit]

    $servername = "www.int-tut.bplaced.net"
    $projektname = "filemanager/InteraktivesTutorial/updates"
    $exedatei = "InterTutorials_Gui.exe"
    $temp = @DocumentsCommonDir & "\temp"
    $update = MsgBox(52, "Updateassistent", "Das Programm wird sich mit dem Internet verbinden, um nach Updates zu suchen. Jetzt verbinden?")

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

    Switch $update
    Case 6
    If DirGetSize($temp) = -1 Then DirCreate($temp)
    ProgressOn("Updater", "Überprüfe, ob Server erreichbar ist...")
    Sleep(2000)
    If Ping($servername, 250) Then
    ProgressSet(20, "Updater", "Verbunden!")
    Sleep(2000)
    Else
    ProgressOff()
    MsgBox(16, "FEHLER", "Das Update Modul hat einen Fehler abgefangen, Grund: der Server ist leider nicht erreichbar oder deine Internetverbindung ist nicht aktiviert.")
    EndIf
    ProgressSet(40, "Updater", "Lade Update Info Datei herunter...")
    InetGet("http://" & $servername & "/" & $projektname & "/version.txt", $temp & "\versionnew.txt")
    Sleep(500)
    $downloaded = FileRead($temp & "\versionnew.txt")
    $localversion = FileRead($temp & "\versionold.txt")
    ProgressSet(60, "Updater", "Vergleiche Server Version mit local Version...")
    Sleep(1000)
    If $downloaded = $localversion Then
    ProgressOff()
    MsgBox(16, "Updater", "Keine neue Version vom Interaktiven Tutorial verfügbar")
    FileDelete($temp & "\versionnew.txt")
    EndIf
    If $downloaded > $localversion Then
    ProgressSet(80, "Updater", "Lade neue Version herunter...")
    InetGet("http://" & $servername & "/" & $projektname & "/" & $exedatei, @DesktopDir & $exedatei)
    ProgressSet(100, "Updater", "Aktualisiere Versionsdaten...")
    FileWrite($temp & "\versionold.txt", $downloaded)
    Sleep(1000)
    MsgBox(64, "Updater", "Eine neue Version von " & $exedatei & " wurde installiert, das neue Programm befindet sich auf dem Desktop")
    FileDelete($temp & "\versionnew.txt")
    EndIf
    Case 7
    MsgBox(64, "Updateassistent", "Update verweigert")
    EndSwitch

    [/autoit]


    Ist aber immer noch ein ziemlicher Flickenteppich :D

    Edit: Ich habe mir auch mal einen Updater gemacht. Im Anhang sind alle nötigen Dateien. Vielleicht kannst du dir ja was abschauen.
    Edit2: Du kannst eine Datei nur mit FileClose schließen wenn du sie mit FileOpen geöffnet hast.

    [autoit]

    FileRead("Test.txt")

    [/autoit]


    macht schließlich nichts anderes als:

    [autoit]

    $File = FileOpen("Test.txt", 1)
    FileRead($File)
    FileClose($File)

    [/autoit]


    FileOpen wird nur gebraucht um Dateien in besoderen Schreib- oder Lesemodi zu öffnen, oder um bei mehreren Lesevorgängen oder großen Dateien die Performance nicht zu beeinträchtigen.

  • Hallo viedeotuner,

    du solltest dein Skript folgendermassen abändern:

    Spoiler anzeigen
    [autoit]

    UpDater()

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

    Func UpDater()
    $servername = "www.int-tut.bplaced.net"
    $projektname = "filemanager/InteraktivesTutorial/updates"
    $exedatei = "InterTutorials_Gui.exe"
    ;$temp = @DocumentsCommonDir & "\temp"
    $temp = @ScriptDir & "\temp"
    $update = MsgBox(52, "Updateassistent", "Das Programm wird sich mit dem Internet verbinden, um nach Updates zu suchen. Jetzt verbinden?")
    Select
    Case $update = 6
    If Not FileExists($temp) Then DirCreate($temp)
    ProgressOn("Updater", "Überprüfe, ob Server erreichbar ist...")
    Sleep(2000)
    If Ping($servername, 2500) Then ;250 ist zu niedrig
    ProgressSet(20, "Updater", "Verbunden!")
    Sleep(2000)
    Else
    ProgressOff()
    MsgBox(16, "FEHLER", "Das Update Modul hat einen Fehler abgefangen, Grund: der Server ist leider nicht erreichbar oder deine Internetverbindung ist nicht aktiviert.")
    Return
    EndIf
    ;Hier unten ist das Problem. Im öffentlichen Dokumenten Ordner und dem Unterordner Temp wird die Datei überhaupt nicht angezeigt
    ProgressSet(40, "Updater", "Lade Update Info Datei herunter...")
    ;*******************************************************************************************************
    HttpSetUserAgent('Firefox') ;wichtig da bplaced sonst abblockt
    ;*******************************************************************************************************
    ;ConsoleWrite("http://" & $servername & "/" & $projektname & "/version.txt" & @CRLF)
    InetGet("http://" & $servername & "/" & $projektname & "/version.txt", $temp & "\version.txt",1)
    $downloaded = FileReadLine($temp & "\version.txt")
    ConsoleWrite($downloaded & @CRLF)
    $localversion = FileReadLine(@DocumentsCommonDir & "\version.txt")
    ProgressSet(60, "Updater", "Vergleiche Server Version mit local Version...")
    Sleep(2000)
    If $downloaded = $localversion Then
    ProgressOff()
    MsgBox(16, "Updater", "Keine neue Version vom Interaktivem Tutorial verfügbar")
    FileDelete($temp & "\version.txt")
    Return
    EndIf
    If $downloaded > $localversion Then
    ProgressSet(80, "Updater", "Lade neue Version herunter...")
    Sleep(2000)
    InetGet("http://" & $servername & "/" & $projektname & "/" & $exedatei, @DesktopDir & $exedatei)
    ProgressSet(90, "Updater", "Schließe Installation ab...")
    Sleep(2000)
    FileClose(@DocumentsCommonDir & "\version.txt")
    FileClose($temp & "\version.txt")
    ProgressSet(95, "Updater", "Aktualisiere Versionsdaten...")
    Sleep(1000)
    FileCopy($temp & "\version.txt", @DocumentsCommonDir & "\version.txt")
    ProgressSet(100, "Updater", "Lösche temporäre Dateien...")
    Sleep(1000)
    FileDelete($temp & "\version.txt")
    ProgressOff()
    MsgBox(64, "Updater", "Eine neue Version von " & $exedatei & " wurde installiert, das neue Programm befindet sich auf dem Desktop")

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

    EndIf

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

    Case $update = 7
    MsgBox(64, "Updateassistent", "Update verweigert")
    Return
    EndSelect
    EndFunc ;==>UpDater
    ;---->ENDE VON UPDATER

    [/autoit]

    dann würde die Datei heruntergeladen wenn sie denn auf dem Server wäre. Manuell ist sie auch nicht erreichbar.

    Zitat

    bplaced.net Diese Seite ist leider nicht mehr verfügbar, Fehler 404. Sorry, this page is not available any more, error 404. - Impressum

    mfg (Auto)Bert

  • Hier einmal der Anfang des Scriptes, um die Oldversion zu erstellen:

    Spoiler anzeigen
    [autoit]

    If Not FileExists(@DesktopDir & "\temp\versionold.txt") Then
    If DirGetSize(@DesktopDir & "\temp") = -1 Then DirCreate(@DesktopDir & "\temp")
    FileOpen(@DesktopDir & "\temp\versionold.txt", 1)
    Sleep(500)
    ;muss nach jeder neuen Version angepasst werden
    FileWriteLine(@DesktopDir & "\temp\versionold.txt", "1") ;<-----HIER
    ;________________________________________________________
    EndIf

    [/autoit]

    Mit dem Script oben wird eine LEERE .txt Datei im Ordner \Desktop\Temp erstellt. Ich habe zum testen die Pfade zum Desktop geändert. Die TXT Datei lässt sich nur (mit Inhalt) erstellen, wenn ich den Ordner Temp weglasse.

  • Was für eine verzwickte Sache. Habe nun herausgefunden, dass wenn ich dieses Script:

    If Not FileExists(@DesktopDir & "\temp\versionold.txt") Then
    If DirGetSize(@DesktopDir & "\temp") = -1 Then DirCreate(@DesktopDir & "\temp")
    FileOpen(@DesktopDir & "\temp\versionold.txt", 1)
    Sleep(500)
    FileWriteLine(@DesktopDir & "\temp\versionold.txt", "1")

    EndIf
    FileWriteLine(@DesktopDir & "\temp\versionold.txt", "1")

    zweimal ausführe, dass dann in der TXT datei einmal reingeschrieben wird. Ich denk mal das liegt an meinem System, weiß wer wie ich das Problem beheben kann? Die Festplatte hat offensichtlich Probleme damit, Daten(.txt) auf die Festplatte zu schreiben oder das System hat Probleme damit, die automatisch geschriebenen Dateien korrekt zu verarbeiten. Manuelles erstellen der txt Dateien sowie von Hand reinschreiben und speichern ist nach wie vor möglich.

  • Das das nur einmal drinsteht liegt daran, dass die Datei mit FileOpen im Schreibmodus 1 geöffnet ist, also überschreibt ein FileWrite Befehl mit diesem Handle alles was vorher drinstand.

    Danke, jetzt funktioniert es. :thumbup: