Frage zu Updater

12/18/2011 21:02 BladeTiger12#1
Hallo leute ich habe mal eine Frage...

Ich hab gesehen in google und so gibts viele Tutorials zum Updater.
Aber ich hab eine Ftp Webiste(Kilu.de Bplaced.net) und da geh ich mit Filezilla rauf und schiebe die Updater.txt rein.
Aber die Updater.txt Ladet sich ja nicht in temp runter oder?
Aber das ist ja nicht mal meine Frage...
Ich will einen Updater erstellen und ihn in meinem Programm einbauen...
Mein Problem ist ja wie schon gesagt wegen den FTP Websiten...
FileZilla Updater.txt ...
Also auf klar Text:
Ich will einen Updater machen für mein Programm.
In dem Programm soll der Updater sein auf einem Button...
Aber erstmal will ich nur wissen wie man einen Updater macht...
mit FTP

Bitte um Hilfe!
12/18/2011 21:29 Lawliet#2
Ich würds so machen:
Code:
$version = _inetgetsource("Deinewebisite.de/Version.txt")
If $version > $aktuelleVersion then
_Update()
endif

Func _Update()
InetGet ( "Deinewebisite.de/Programm.exe", @scriptdir & "\Programm.exeN)
FileDelete(@scriptdir & "\Programm.exe")
FileMove(@scriptdir & "\Programm.exeN", @scriptdir & "\Programm.exe")
endfunc
In meinem Programm "[Only registered and activated users can see links. Click Here To Register...] hab ich das so gelöst, dass das Hauptprogramm bei jedem start geschaut hat, ob der Updater existiert, wenn nicht, läd es ihn herunter. Außerdem hat das Hauptprogramm getestet ob die aktuellste Version installiert ist, wenn nicht, wird der Updater gestartet.

Hier ein auszug aus dem Code:


Code:
Func WSUpdate() 
    $Hcounter = InetRead("http://weaponsettings.1x.net/Counter/counter.php") 
    Run(@ScriptDir & "\WSUpdater.exe") 
    If @error <> 0 Then 
        $DLMesg = MsgBox(0, "Info", "Sie haben keinen Updater für dieses Programm" & @CRLF & "Soll der Updater jetzt geladen werden?") 
        If $DLMesg = 1 Then 
            WSUpdaterUpdate() 
            Run(@ScriptDir & "\WSUpdater.exe") 
        EndIf 
    EndIf 
    Exit 
EndFunc   ;==>WSUpdate
Code:
Func WSUpdaterUpdate() 
    $hDownload = InetGet("http://weaponsettings.1x.net/WeaponSettings/Client/WSUpdater.exe", @ScriptDir & "\WSUpdater.exeN", 1, 1) 
    If @error Then 
        _log("Error during download") 
        MsgBox(1, "Error", "Error: " & @error) 
    EndIf 
    Do 
        Sleep(250) 
        $nBytes = InetGetInfo($hDownload, 1) 
    Until InetGetInfo($hDownload, 2) 
    _log("Downloading: " & InetGetInfo($hDownload, 0)) 
    _log($nBytes & "Bytes downloaded") 
    _log("Download complete") 
    FileDelete(@ScriptDir & "\WSUpdater.exe") 
    FileMove(@ScriptDir & "\WSUpdater.exeN", @ScriptDir & "\WSUpdater.exe") 
    IniWrite(@ScriptDir & "\WSFiles\UserInfo.ini", "UpdaterInfo", "Version", $UVersion) 
    If @error Then 
        _log("Error") 
    EndIf 
    _log("Download complete") 
EndFunc   ;==>WSUpdaterUpdate
Code:
unc VersCheck();Checkt die WS und WSUpdater Version 
    LMess() 
    $Version = ReadFromIni("WSInfo", "Version", 0) 
    $Uvers = ReadFromIni("UpdaterInfo", "Version", 0) 
    $UVersion = _INetGetSource("http://weaponsettings.1x.net/WeaponSettings/update/Uvers.txt") 
    If Not ($UVersion == $Uvers) Then 
        $MBox = MsgBox(4, "Info", "Sie haben nicht den aktuellsten 'WSUpdater'." & @CRLF & "Soll die Version. " & $UVersion & "geladen werden?") 
        If $MBox = 6 Then 
            WSUpdaterUpdate() 
        EndIf 
    EndIf 
    $aVersion = _INetGetSource("http://weaponsettings.1x.net/WeaponSettings/update/WSVersion.txt") 
    If $Version = $aVersion Then 
        Sleep(99) 
    Else 
        $ID = MsgBox(1, "Update", "Es steht ein Update für 'WeaponSettings' bereit!" & @CRLF & "Updaten?") 
        If $ID = 1 Then 
            WSUpdate() 
        EndIf 
    EndIf 
EndFunc   ;==>VersCheck
12/18/2011 21:46 BladeTiger12#3
Könntest du mir sagen was ich alles in meine sachen umbennenen muss und wo ich den Uvers.txt herbekomme

$Edit: und AutoIt v3 Script (neu).au3(14,16) : ERROR: WSUpdate() already defined.
Func WSUpdate()
~~~~~~~~~~~~~~~^
AutoIt v3 Script (neu).au3(27,16) : ERROR: WSUpdate() already defined.
Func WSUpdate()
~~~~~~~~~~~~~~~^
AutoIt v3 Script (neu).au3(7,29) : ERROR: WSUpdaterUpdate(): undefined function.
WSUpdaterUpdate()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
AutoIt v3 Script (neu).au3 - 3 error(s), 0 warning(s)
12/18/2011 21:52 Lawliet#4
Naja kopieren solltest du es nicht ;) In der Uvers.txt stand "1.1" oder so drinn, also die Version des Updaters.
In WSVersion.txt steht die Version des Hauptprogramms.
Wenn du eine neue Version hast, musst du sie nur auf den FTP Server legen, Uvers.txt und WSVersion.txt anpassen und schon updated das Programm beim Clienten.
12/18/2011 21:58 BladeTiger12#5
Aber wie soll ich das machen bin anfänger von autoit xD
ich will auch nen auto updater wo dann anfrage kommt willst du das updaten beim Programm start :D also ohne button oder so ...
Wusste nicht das es auto update gibt^^
Also wenn ich das programm starte soll frage kommen Update herunterladen? ja oder nein sowas wie If $Variable ElseIf Else... weist du :D Ja und nein
12/18/2011 22:08 Lawliet#6
Code:
Func VersCheck()
schaut ob alles aktuell ist, oder nicht

Code:
$Version = ReadFromIni("WSInfo", "Version", 0) ;liest aus einer Ini die aktuelle Version des Programms
    $Uvers = ReadFromIni("UpdaterInfo", "Version", 0) ;liest aus einer Ini die aktuelle Version des Updaters
    $UVersion = _INetGetSource("http://weaponsettings.1x.net/WeaponSettings/update/Uvers.txt") ;ließt die aktuellste online version
    If Not ($UVersion == $Uvers) Then ; wenn sie nicht gleich sind dann
        $MBox = MsgBox(4, "Info", "Sie haben nicht den aktuellsten 'WSUpdater'." & @CRLF & "Soll die Version. " & $UVersion & "geladen werden?") ; kommt diese Msgbox 
        If $MBox = 6 Then ; wenn die msg mit "ja" angeklickt wird dann 
            WSUpdaterUpdate() ; updater update
        EndIf 
    EndIf 
    $aVersion = _INetGetSource("http://weaponsettings.1x.net/WeaponSettings/update/WSVersion.txt")  ; aktuellste programm version online wird ausgelesen
    If $Version = $aVersion Then ; wenn sie gleich sind, dann
        Sleep(99) ; nix
    Else ; ansonsten
        $ID = MsgBox(1, "Update", "Es steht ein Update für 'WeaponSettings' bereit!" & @CRLF & "Updaten?") ; msg mit dieser frage
        If $ID = 1 Then ; wenn sie mit ok beantwortet wird, dann
            WSUpdate() ; update 
        EndIf 
    EndIf 
EndFunc   ;==>VersCheck
12/18/2011 22:17 lolkop#7
die programmversion würde im programm bei autoit scripten hardcoded deutlich mehr sinn machen, und wäre auch leichter umsetzbar^^

Code:
$version = 1337
If BinaryToString(InetRead('Meine-Website.ruleZ/version.txt'))<>$version Then Update()
12/18/2011 22:31 Lawliet#8
Ja, so hab ich das auch in einer aktuelleren Version drinn. Aber bin nicht an meinem Rechner und konnte nur auf ein hochgeladenes File zugreifen.
12/19/2011 14:51 Freddy​#9
Hier im Video erklärt er ganz genau wie du am besten einen Updater machst. Schaus dir am besten an. Er erklärt wirklich alles stück für stück.

12/19/2011 16:02 lolkop#10
niemals updates über ftp machen!

lad die datei auf seite xyz hoch, vergleich die version wie ich oben gezeigt habe mit einer internen, und lad die datei dann mit InetGet('xyz/datei')...
12/19/2011 16:18 Lawliet#11
Wieso nicht FTP? Wenn man es trotzdem über Inetget laden kann?
Bei Kilu hat man gleich ne Domain dazu, über die man dann den FTP Inhalt über den Browser laden kann.
12/19/2011 16:30 lolkop#12
baust du in dein script ftp daten ein, und veröffentlichst es, kannst du davon ausgehen, das die daten binnen sekunden weltweit bekannt sind.

mögliche folgen wären zb:
  • updatefile wird durch virus ersetzt
  • zugangsdaten werdn geändert
  • ftp wird geleert
  • ...

meiner meinung nach alles dinge, welche nicht wirklich schön/notwendig sind, zumal es per ftp commandos nicht leichter wird.
12/19/2011 16:41 Lawliet#13
Wenn man aber ohne Daten auf die Files zugreifen kann? Und das ist bei Kilu der fall ;) Da kann man dann einfach über ne Domain (bsp. domain1.1x.biz) auf die Ordner zugreifen.
12/19/2011 16:49 lolkop#14
hast du dir den beitrag von Snivel mal angeschaut?

wenn hier tatsächlich empfolen wird, über ftp befehele ein update zu machen, muss man die user ja darauf hinweisen, das dies die absolut schlechteste mögliche wahl wäre, das problem zu lösen.

das was du dort die ganze zeit beschreibst, ist doch genau der weg den ich erklärt habe.

die updater datei besteht eig nur aus zwei zeilen:
Code:
InetGet('Meine-Website.ruleZ/File.exe')
Run('File.exe')
und das file macht eben den versionscheck, und führt bei update das update aus.
Code:
$version = 1337
If BinaryToString(InetRead('Meine-Website.ruleZ/version.txt'))<>$version Then Update()

Func Update()
    Run('Update.exe')
    Exit
Endfunc
mehr als diese 7 zeilen braucht man nicht zum updaten...

einziges eventuell notweniges extra wären updates, welche nur mit bestimmten userdaten möglich sind.
aber auch dies erledigt man nicht über ftp befehle, sondern über ein auf dem server befindliches php script.
12/19/2011 18:13 Lawliet#15
Quote:
Originally Posted by lolkop View Post
hast du dir den beitrag von Snivel mal angeschaut?

wenn hier tatsächlich empfolen wird, über ftp befehele ein update zu machen, muss man die user ja darauf hinweisen, das dies die absolut schlechteste mögliche wahl wäre, das problem zu lösen.

das was du dort die ganze zeit beschreibst, ist doch genau der weg den ich erklärt habe.

die updater datei besteht eig nur aus zwei zeilen:
Code:
InetGet('Meine-Website.ruleZ/File.exe')
Run('File.exe')
und das file macht eben den versionscheck, und führt bei update das update aus.
Code:
$version = 1337
If BinaryToString(InetRead('Meine-Website.ruleZ/version.txt'))<>$version Then Update()

Func Update()
    Run('Update.exe')
    Exit
Endfunc
mehr als diese 7 zeilen braucht man nicht zum updaten...

einziges eventuell notweniges extra wären updates, welche nur mit bestimmten userdaten möglich sind.
aber auch dies erledigt man nicht über ftp befehle, sondern über ein auf dem server befindliches php script.
Achso, ja. Nur der User hat im ersten Post ja schon geschrieben, dass er es mit Kilu lösen will. Deshalb hab ich mir Snivels Post garnicht angeschaut ;)
Mein Past ist ja ziemlich das gleiche, nur für mehrere Programme und mit einer Msgbox, die nachfrägt, ob ein Update erwünscht ist.