[AutoIt] Update Funktion für eure Bots

04/09/2010 12:40 Killerzwerg829#1
Hallo.

Ich möchte euch zeigen, wie ihr eine simple Update Funktion für eure Bots erstellt. Seid nicht zu hart zu mir, weil das mein erstes Tutorial ist ;)



Als bevor wir mit den Code anfangen, werde ich euch das Prinzip erklären:


- Es gibt ein kleines Programm, welches das Update durchführt. Dieses könnt ihr einfach via Run() mit euren Bot mitstarten lassen. Dies wird benötigt, da sich nicht so leicht eine laufendes Programm überschreiben lässt.

- Das Update Programm läd dann eine *.txt Datei von einem FTP Server runter.

- Dieser Datei wird dann mit der Version des Bots abgeglichen.

- Wenn diese sich unterscheiden sollten, wird nachgefragt, ob der User ein Update möchte.

- Wenn der User dies möchte, wird Bot geschlossen und es wird die neuere Version runtergeladen und überschrieben.

- Wenn alles fertig ist, wird der Bot neu gestartet.





So, nun kommen wir zur "Schritt für Schritt" Anleitung.



PHP Code:
#notrayicon
sleep(1500)
FileDelete(@TempDir "\update.txt")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/update.txt",@TempDir "\update.txt"10
Hier warten wir ersteinmal 1,5 Sekunden. Dies ist wichtig, da sonst das Update Fenster möglicherweise unter dem eigentlichen Bot landet.
Dann überprüfen wir, ob im Temp Verzeichnis eine update.txt liegt und löschen sie.
Jetzt wird die neue update.txt heruntergeladen.




PHP Code:
$file FileOpen(@TempDir "\update.txt"0)
$ver_server FileReadLine($file1)
$ver_pc IniRead("Settings.ini""Info""Version","")
If 
$ver_server $ver_pc or $ver_server "" Then
FileClose
($file)
FileDelete(@TempDir "\update.txt")
Else 
Die gerade heruntergeladene update.txt wird nun aus dem Temp Verzeichnis geöffnet. Dann wird in die Variable "$ver_server" die Server Version gespeichert. Dies Funktioniert so, dass aus der update.txt die erste Zeile auslesen.
"$ver_pc" muss die Version den Bots enthalten. Ich speichere diese immer in die Settings.ini Datei meines Bots.
In der If abfrage wird überprüft, ob die Server Version mit der des Bots übereintstimmt.




PHP Code:
$msgbox MsgBox(36"Update!""Es ist ein neues Update verfügbar! Wollen sie es runterladen?")
If 
$msgbox 6 Then
Tooltip
("Update wird runtergeladen... bitte warten :-)")
ProcessClose ("Dein Bot.exe")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/Dein Bot.exe",@scriptDir&"\" & "Dein Bot", 1, 0)
IniWrite("
Settings.ini", "Info", "Version", $ver_server)
FileClose(
$file)
FileDelete(@ScriptDir & "
\update.txt")
Tooltip("") 
Wenn in der MessageBox Ja gedückt wurde, dann soll ein ToolTip erscheinen, dass das Update noch am runterladen ist.
Der Bot wird dann einfach über ProcessClose() geschlossen.
Dann kann die neuere Version des Bots in das Script Verzeichnis heruntergeladen werden.
Da ich meine Version immer in der Settings speichere, schreibe ich nun in die Settings.ini die neue Version des Bots.




PHP Code:
$mb = @InetGetBytesRead
$mb 
$mb 1000000
$mb 
StringLeft ($mb4)
msgbox(0,"Update""Das Programm wurde aktualisiert ;)" & @LF "Es wurden " $mb " mb empfangen.")
run("Dein Bot.exe")
EndIf
EndIf 
Durch @InetGetBytesRead bekommen wir heraus, wie viele Bytes übertragen wurden. Diese lange Zahl rechnen wir dann in Mb um und kürzen sie auf die ersten 4 Stellen.
In einer Message Box zeigen wir nun, dass das Update fertig ist und wie viel Mb empfangen wurden.
Zum guten Schluss wird noch der neue Bot automatisch gestartet :)



Unser Script ist nun fertig und sieht so aus:


PHP Code:
#notrayicon
sleep(1500)
FileDelete(@TempDir "\update.txt")
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/update.txt",@TempDir "\update.txt"10)
$file FileOpen(@TempDir "\update.txt"0)
$ver_server FileReadLine($file1)
$ver_pc IniRead("Settings.ini""Info""Version","")
If 
$ver_server $ver_pc or $ver_server "" Then
    FileClose
($file)
    
FileDelete(@TempDir "\update.txt")
Else
    
$msgbox MsgBox(36"Update!""Es ist ein neues Update verfügbar! Wollen sie es runterladen?")
    If 
$msgbox 6 Then
        Tooltip
("Update wird runtergeladen... bitte warten :-)")
        
ProcessClose ("Dein Bot.exe")
        
InetGet("ftp://dein-ftp-server.de/Dein-Bot-Verzeichnis/Dein Bot.exe",@scriptDir&"\" & "Dein Bot", 1, 0)
        IniWrite("
Settings.ini", "Info", "Version", $ver_server)
        FileClose(
$file)
        FileDelete(@ScriptDir & "
\update.txt")
        Tooltip("")
        
$mb = @InetGetBytesRead
        
$mb = $mb / 1000000
        
$mb = StringLeft ($mb, 4)
        msgbox(0,"
Update", "Das Programm wurde aktualisiert ;)" & @LF & "Es wurden " & $mb & " mb empfangen.")
        run("
Dein Bot.exe")
    EndIf
EndIf 



Ich weiß, dass man den Script an manchen Stellen kürzer schreiben könnte, aber so finde ich ihn übersichtlicher ;)
Ich hoffe ich könnt etwas anfangen.


Wer keinen FTP Server hat, kann einfach einen auf seinem PC laufen lassen, oder auf sich kostenlosen Webspace auf Kilu o.ä. holen.


lg Chris
02/08/2011 17:29 lolxd232#2
Wie kann man einen ftp server auf dem pc starten laufen lassen?
und was soll mann ins neue text dukument schreiben?!?

Aber für dein Erstes TuT Nice!
06/21/2011 14:57 ♥ .Meroc' ♥#3
O.o Ich weis der Thread ist alt und wurde vom Vorposter Hpchgepushed (#reported :D) aber:

Was muss in der update.txt und settings.ini stehen? :D

High
07/01/2011 19:56 *Dr.Bob*#4
Quote:
Originally Posted by Highlander™ View Post
O.o Ich weis der Thread ist alt und wurde vom Vorposter Hpchgepushed (#reported :D) aber:

Was muss in der update.txt und settings.ini stehen? :D

High
hab es jetzt nur überflogen,

normal ist ja: If $ver_server = $ver_pc or $ver_server = "" Then

also ist z.b $ver_pc v1.1.1 (muß in der Settings.ini stehn)
und auf deinem Server eine Textdatei (namens : update.txt) in der steht: v1.1.1