Eine Update funktion für Programme?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Shuyin
Beiträge: 31
Registriert: 17.12.2005 15:29

Eine Update funktion für Programme?

Beitrag 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
Benutzeravatar
DataMiner
Beiträge: 220
Registriert: 10.10.2004 18:56

Beitrag von DataMiner »

__________________________________________
Weniger glauben - mehr wissen!
------------------------------------------------------
Proud beneficial owner of SpiderBasic, PureBasic 3.x, 4.x, 5.x and PureVisionXP
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag 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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Hört sich ja ganz gut an aber warum verwendest du eine Ini und nicht XML?
Das ist doch viel flexziebler
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

[OT:]
Ohh.JAAAAA.....XML ich....KOOOOMMMEEEEEEEE :mrgreen: :mrgreen: :mrgreen: :lol:
[\OT]
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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 ;)
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag 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 :)
Antworten