Seite 1 von 2

Eine Update funktion für Programme?

Verfasst: 01.01.2006 16:35
von Shuyin
Hallo,
ich wollte euch fragen, wie man eine Update funktion für sein Programm einrichten kann, wo nach neuere versionen gesucht und wenn erwünscht, runtergeladen wird.

Die leute haben bei mir fast keine lust mehr, die neuen versionen runterzuladen, die nur ca. 20-30kB groß sind, deswegen wünschen sich die leute so eine funktion, wo es dann Automatisch runtergeladen wird.

Wisst ihr vielleicht, wie man so etwas realisieren könnte ?


, Shuyin

Verfasst: 01.01.2006 17:53
von DataMiner

Verfasst: 01.01.2006 19:57
von AND51
Hi!

Ich habe mir mal eine solche Updatefunktion geschrieben, die sich (hoffentlich) in allen Programmen einbauen lässt.

Damit das Programm "professioneller" aussieht, habe ich die Updateroutine so ausgelegt, dass nur dann nach Updates gesucht wird, wenn der Benutzer den Knopf dazu drückt.

Funktionsweise und Features:
-Läd eine ini-Datei von einem HTTP-Server herunter und analysiert sie
-Versucht ein Update von bis zu zehn Downloadmirror's herunterzuladen (wenn Server nicht geht, wird versucht, von einem anderen Server das Update herunterzuladen)*
-Vor dem Download des Updates kann ein Meldungsfenster ausgegeben werden (z. B. "Der Autor des Programms teilt folgendes mit: blablabla")
-automatisches starten des Updates nach Download
-mehrere Sprachen möglich

*Nach etwas umarbeiten können auch mehr als 10 Server angegeben werden. Es können überall dort Updates runtergeladen werden, wo man mit URLDownloadToFile_() (API) hinkommt.

So funktioniert das Update: Nach starten des Vorgangs durch den Benutzer wird eine ini-Datei von einem Server heruntergeladen und geöffnet. Dort stehen verschiedene Informationen drin, di während des Updateverlaufs gebraucht werden. Als erstes kommt eine Meldungsbox, die fragt, ob das Update durchgeführt werden soll; wenn ja dann ini laden und dann wird eine weitere Box ausgegeben. Dort hast du dann die Möglichkeit, dem Benutzer in einer Messagebox vor dem eigentlichen Update etwas mitzuteilen, z. B. Änderungen, etc.. Es wird auch die Größe des Updatepakets angezeigt. Dann wird das Update heruntergeladen. Es können bis zu zehn Downloadquellen angegeben werden. Kann das Update von einem Server nicht heruntergeladen werden, versucht das Programm es mit dem nächsten Server. Kann das Update gar niht geladen werden, wird dem Nutzer angeboten, die Homepage (des Programms/Autors) zu besuchen.
Das Updatepaket selbst ist mit der Windowskomponente IExpress zusammengestellt. Es ist im Grunde nichts anderes als ein SFX-Archiv im *.cab Format. Es entpackt und überschreibt alle upzudatenden Dateien im Programmverzeichnis. Das geht am besten mit IExpress, da man hier einstellen kann, dass keine nervenden Fragen und Fenster geöffnet werden. Außerdem ist es am einfachsten zu steuern, z. B. wo die Dateien entpackt werden sollen.

Nebenbei bemerkt, die Updateroutine ist circa 45 Zeilen lang; solltest du mehr erwartet haben, weil ich gerade einen Roman schreibe, dann sry. Trotzdem bietet die Routine meiner Meinung nach gute Optionen und da ich dir bei Interesse direkt den Quellcode gebe, kannst du den Code natürlich 100%ig nach deinen Bedürfnissen anpassen.

MfG, AND51

P.S.: Start => Ausführen => iexpress

Verfasst: 01.01.2006 23:18
von Konne
Hört sich ja ganz gut an aber warum verwendest du eine Ini und nicht XML?
Das ist doch viel flexziebler

Verfasst: 02.01.2006 02:04
von Zaphod
weil pb mit funktionen zum lesen von inis kommt, aber nicht für xml. auch ist es reine masturbation das kompliziertere xml an stellen zu benutzen, wo seine flexibilität nicht gebraucht wird.

Verfasst: 02.01.2006 12:18
von Tafkadasom2k5
[OT:]
Ohh.JAAAAA.....XML ich....KOOOOMMMEEEEEEEE :mrgreen: :mrgreen: :mrgreen: :lol:
[\OT]

Verfasst: 02.01.2006 16:55
von Zaphod
na ich bekomme das immer von leuten zu höhren, die gerne mit buzzwords umsich werfen... "hey, benutze doch xml als levelformat für dein pong-spiel"

da kann man sich doch wirklich nurnoch wundern ;)

Verfasst: 02.01.2006 18:10
von HeX0R
Es scheint etwas in Vergessenheit geraten zu sein, aber GPI (ja der , der in den Untiefen irgendeines Wuselspiels festsitzt) hat doch mal einen Universal Internet-Updater angeboten.

Die Seite gibts zwar nimma, aber das Proggy müsste doch noch irgendwo zu finden sein.

Verfasst: 02.01.2006 18:20
von ts-soft
HeX0R hat geschrieben: Die Seite gibts zwar nimma, aber das Proggy müsste doch noch irgendwo zu finden sein.
Seine Homepage ist hier: http://gpihome.de/purebasic/
direkter Download: http://gpihome.de/purebasic/UniversalIn ... pdater.rar
Sein letztes veröffentlichtes Programm "WOW-Starter.rar" findet man auch dort.

Verfasst: 02.01.2006 19:47
von Tsuki-Namida
ich habe in ein meiner programme eine kleine eigentlich auch sehr einfache und billige wariante als update geschrieben. auch bei einem server wechsel ist es eigentlich immer aktuell.

ich habe ein txt angelegt wo die adresse des servers steht diese lese ich aus. dann nehme ich die ausgelesene adresse$ + "Server.txt" und lade diese neu runter und lese die server adresse neu ein. so mus ich bei einem server wechsel nur die "Server.txt aus den alten lassen und das update auf den neuen. ist sogar sehr evektiv ;)

naja hier kannst du mein quellen text haben wenn du magst :)

Code: Alles auswählen

Procedure.s GetExePath()
  Prg.s = Space(#MAX_PATH)
  GetModuleFileName_(GetModuleHandle_(0), @Prg, #MAX_PATH)
  Prg = GetPathPart(Prg)
  If (FindString(prg,"\PureBasic\Compilers\", 1))
    Prg.s = Space(#MAX_PATH)
    GetCurrentDirectory_(#MAX_PATH,@Prg)
  EndIf
If Right(Prg, 1) <> "\" : Prg + "\" : EndIf
  ProcedureReturn Prg
  teste$ = Prg.s
EndProcedure

Server$ = GetExePath() + "Server.txt"
If ReadFile(0, Server$)
  Server_Date$ = ReadString()
  CloseFile(0)
  Url.s = Server_Date$ + "server.txt"
  Dateiname.s = GetExePath() + "Server.txt"
  URLDownloadToFile_(0, URL.s, Dateiname.s, 0, 0)
  Server$ = GetExePath() + "Server.txt"
  ReadFile(0, Server$)
  Server_Date$ = ReadString()
  CloseFile(0)
EndIf
Version_datei1$ = GetExePath() + "Version.txt"
If ReadFile(0, Version_datei1$)
  Versionalt$ = ReadString()
  CloseFile(0)
EndIf

Url.s = Server_Date$ + "version.txt"
Dateiname.s = GetExePath() + "Version.txt"
URLDownloadToFile_(0, URL.s, Dateiname.s, 0, 0)
Version_datei$ = GetExePath() + "Version.txt"
If ReadFile(0, Version_datei$)
  Versionsnummer$ = ReadString()
  CloseFile(0)
  If Versionsnummer$ <> Versionalt$
    Url.s = Server_Date$ + "streamer.exe"
    Dateiname.s = GetExePath() + "StreamerS.exe"
    URLDownloadToFile_(0, URL.s, Dateiname.s, 0, 0)
  EndIf
Else
  MessageRequester("Information","Verson konnte nicht überprüft werden.")
EndIf
Run$ = GetExePath() + "StreamerS.exe"
RunProgram(Run$,"","",0)
nimm dir aus den code was du brauchst :)