Ich frag mich nur wo im Script sich der Updater die updates.txt aus dem Inet holt? gar nicht :D?
Patcher Entwicklung
-
Silverlight -
28. Januar 2010 um 12:59 -
Erledigt
-
-
Ich frag mich nur wo im Script sich der Updater die updates.txt aus dem Inet holt? gar nicht :D?
[autoit]
_CheckUpdates lässt die Angabe von lokalen Pfaden und URLs zu. Zum testen hab ich einfach eine lokale datei verwendet_CheckUpdates('http://www.example.com/updater.txt', $sZiel)
[/autoit] -
Hab alles eingestellt und lokal versucht, allerdings kommt ein Error in Line 56.
For $i = 1 To $aUpdates[0][0]
For $i = 1 To $aUpdates^ErrorError: Subscript used with non-Array variable.
-
Hab alles eingestellt und lokal versucht, allerdings kommt ein Error in Line 56.
For $i = 1 To $aUpdates[0][0]
For $i = 1 To $aUpdates^ErrorError: Subscript used with non-Array variable.
Das heißt, bei der Verbindung gab es einen Fehler. Ich musste aber noch was an der FUnktion ändern, da manche FTP-programme @CRLF in @LF umwandeln und dann das Splitten nicht mehr funktioniert hat. So läuft es bei mir:Spoiler anzeigen
[autoit]#include<Crypt.au3>
[/autoit] [autoit][/autoit] [autoit]; $sUpdateURL: Datei im Internet oder lokal, die die MD%-Hashes enthält
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
; $sUpdatePath: Das Verzeichnis, in dem die Dateien verglichen und werden
Func _CheckUpdates($sUpdateURL, $sUpdatePath)
; Author: Prog@ndy
;~ ; Beispielformat für die Textdatei (UTF-8 ohne BOM):
;~ Dateiname|MD5-Hash|Download-Adresse{@CRLF}
;~ test.txt|0x16f50d7f1078ae2116f3e9fa4ba25203|http:/download.com/a.txt
;~ temp.txt|0x0401DEFCF635DE4EAE161DC1F0F643DA|http:/download.com/b.txt
$sUpdatePath = StringReplace(StringReplace($sUpdatePath, '/', '\')&'\', '\\', '\')
Local $aUpdateFiles[1][4] = [[0]]
Switch StringInStr($sUpdateURL, "://")
Case 0
Local $hFile = FileOpen($sUpdateURL, 16)
If @error Then Return SetError(1,0,0)
Local $sSource = FileRead($hFile)
FileClose($sSource)
Case Else
Local $sSource = InetRead($sUpdateURL)
If @error Then Return SetError(1,0,0)
EndSwitch
$sSource = StringSplit(StringStripCR(BinaryToString($sSource, 4)), @LF, 1)
If StringLeft($sSource[1], 3) = Chr(0xEF)&Chr(0xBB)&Chr(0xBF) Then $sSource[1] = StringTrimLeft($sSource[1], 3)
Local $aFile, $sHash
Local $aUpdateFiles[$sSource[0]+1][4] = [[0]]
_Crypt_Startup()
For $i = 1 To $sSource[0]
$aFile = StringSplit($sSource[$i], '|', 2)
If UBound($aFile)<>3 Then ContinueLoop ; Name|MD5|URL
$sHash = _Crypt_HashFile($sUpdatePath & $aFile[0], $CALG_MD5)
If $aFile[1] <> $sHash Then
$aUpdateFiles[0][0] += 1
$aUpdateFiles[$aUpdateFiles[0][0]][0] = $aFile[0]
$aUpdateFiles[$aUpdateFiles[0][0]][1] = $aFile[1]
$aUpdateFiles[$aUpdateFiles[0][0]][2] = $aFile[2]
$aUpdateFiles[$aUpdateFiles[0][0]][3] = $sHash
EndIf
Next
ReDim $aUpdateFiles[$aUpdateFiles[0][0]+1][4]
_Crypt_Shutdown()
Return $aUpdateFiles
; Rückgabe:
;~ Dateiname|MD5-Hash|Download-Adresse|lokaler MD5{@CRLF}
EndFunc; ------------------------------------------------------------------------------------------------------------------------
[/autoit]
; BEISPIEL:
; ------------------------------------------------------------------------------------------------------------------------
#include<Array.au3>
$sZiel = @ScriptDir&'\dateien\'
;~ $aUpdates = _CheckUpdates(@ScriptDir&'\updates.txt', $sZiel)
HttpSetUserAgent("AppUpdater") ; für bplaced + square7 nötig
$aUpdates = _CheckUpdates('http://...', $sZiel)
_ArrayDisplay($aUpdates)
For $i = 1 To $aUpdates[0][0]
SplashTextOn("Download Patch", $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
If StringInStr($aUpdates[$i][0], '\') Then DirCreate( $sZiel & StringRegExpReplace($aUpdates[$i][0], '\\[^\\]*$', ''))
InetGet($aUpdates[$i][2], $sZiel & $aUpdates[$i][0], 1)
;MsgBox(0, '', "z.B. Download datei..."& @CRLF & $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
SplashOff()
Next
; ------------------------------------------------------------------------------------------------------------------------
; ------------------------------------------------------------------------------------------------------------------------ -
Hmmm bei mir wird nur ein ArrayDisplay geöffnet & sonst passiert nix
-
Hmmm bei mir wird nur ein ArrayDisplay geöffnet & sonst passiert nix
wenn im _ArrayDisplay nur eine 0 steht, gibt es nichts zum Updaten -
Ich hatte extra eine Datei rausgenommen!?
-
Ich hatte extra eine Datei rausgenommen!?
Kannst du mir mal deine Tests posten? Ich weiß grad nicht, was der Fehler sein soll -
Hmm man muss den Patcher aber immer 2 mal ausführen!?
Beim erstmal legt er nur die Unter Ordnern an und deren Dateien.
Allerdings nicht die in /dateien/ -
Hallo,
ich weiß das dieses Thema schon älter ist, jedoch habe ich genau sowas gesucht.Hier nun meine Frage:
Das Skript, so wie es hier von Progandy geschrieben ist funktioniert bei mir lokal mit einem xampp Server problemlos.
Alle Verzeichnisse und Dateien werden problemlos "gepatcht" wenn veränderungen an diesen vorliegen.
Jetzt aber wollte ich das ganze mit IIS 7.5 testen und er lädt nur die Verzeichnisse herrunter und keine Dateien
Den "mime-typ" habe ich für jeden Dateityp angepasst und es läßt sich auch anhand der url im Browser runterladen.
Was müßte ich ändern, das es auch unter IIS 7.5 funktioniert? -
Dann gibt halt mal @error von InetGet aus und schau was der Fehler ist.
-
Danke für die schnelle Antwort chip,
mein Problem hat sich jedoch schon aufgelöst
es lag nicht am Script wie ich anfangs vermutet hatte, ich habe noch einmal eine subdomain eingerichtet und die Berechtigungen gesetzt, jetzt funktioniert es auch mit ISS 7.
Leider kann ich nicht mehr nachvollziehen was ich vorher verkehrt gemacht hatte....schönen Tag noch
-
Hallo,
das mit der Progressbar würde mich auch noch interessieren.
[autoit]
Du hast von Hilfe gesprochen, nicht von komplett schreiben lassen
Das Beispiel hat ja bereits eine Schleife, in der eine MsgBox aufgeht für jede geänderte Datei. Hier musst du dann Code für den download einbauen.
Ohne Fortschrittsanzeige sähe das dann so aus: Wie du dann den Fortschrittsbalken ainbaust, musst du selbst rausfinden.For $i = 1 To $aUpdates[0][0]
[/autoit]
SplashTextOn("Download Patch", $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
If StringInStr($aUpdates[$i][0], '\') Then DirCreate( $sZiel & StringRegExpReplace($aUpdates[$i][0], '\\[^\\]*$', ''))
InetGet($aUpdates[$i][2], $sZiel & $aUpdates[$i][0], 1)
;MsgBox(0, '', "z.B. Download datei..."& @CRLF & $aUpdates[$i][0] & @CRLF & "Von: " & $aUpdates[$i][2] &@CRLF & "Nach: " & $sZiel)
SplashOff()
Nextalso mit einer Datei habe ich sowas auch schonmal gemacht, jedoch der Patcher stellt ja erst anhand von den md5-hash fest welche Datei er laden soll.
Das heißt, dass die Größe der Dateien die geladen werden bei jeden unterschiedlich sein können.
Vielleicht kann mir da mal jemand auf die Sprünge helfen? -