Eigene Updateroutine fürs Programm

Für allgemeine Fragen zur Programmierung mit PureBasic.
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Eigene Updateroutine fürs Programm

Beitrag von Amor_2001 »

Hallo zusammen,

ich habe ein Programm geschrieben, welches aus einer einzigen EXE (starter.exe) besteht. Diese Programm soll beim Start prüfen, ob sich in einem Updateverzeichnis eine neue Version befindet (gleicher Name) und dann diese Version ins Programmverzeichnis kopieren, sich selbst beenden und dann neu starten.
Da die EXE durch das gestartete Programm gelockt ist, kann man sie ja nicht löschen oder überschreiben.
Habe auch experimentiert mit neues Proramm das die neue Version kopiert starten, starter.exe beenden, starter exe starten, neues Programm beenden. Aber das ist nicht das, was ich gern möchte.
Hat jemand eine Idee oder einen Codeschnipsel für mich?

Wäre sehr dankbar.
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

Re: Eigene Updateroutine fürs Programm

Beitrag von ts-soft »

Schreibst eine Batch-Datei die die neue Exe kopiert. Dann beendet Du die Exe und startest die Batch-Datei.
Danach startest Du die Exe erneut.

Das funktioniert natürlich nur dort, wo Du schreibrechte hast, also seltenst dort wo Deine Exe ist.

Gruß
Thomas
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
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Eigene Updateroutine fürs Programm

Beitrag von Amor_2001 »

Hallo Thomas,

danke, an sowas hatte ich auch schon gedacht. Die Überlegung war aber, es nur bei einer Datei zu belassen und es aus dem Programm selbst heraus zu versuchen.
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

Re: Eigene Updateroutine fürs Programm

Beitrag von ts-soft »

Du läßt es doch bei einer Datei, mehr oder weniger. Dein Programm schreibt das Batch und führt es aus,
bevor es sich beendet. Das Batch kopiert, startet neue Datei und löscht sich selbst (das geht, weil die
Batch datei nur ein Script ist, das von cmd.exe ausgeführt wird).
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
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Eigene Updateroutine fürs Programm

Beitrag von Amor_2001 »

Hatte ich mir eigentlich anders gedacht, ohne eine extra Datei zu schreiben.
Aber wenn es nicht noch eleganter geht, bleibt mir wohl nichts anderes übrig.

Danke erstmal
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Eigene Updateroutine fürs Programm

Beitrag von STARGÅTE »

Ein anderer Weg wäre: A - Original Exe, B - Update Exe, C - umbenannte original Exe

A läuft, startet B und beendet sich.
B benennt A in C um, startet C und beendet sich.
C kopiert B in den Ordner von C, startet B und beendet sich.
B löscht C.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Chimorin
Beiträge: 451
Registriert: 30.01.2013 16:11
Computerausstattung: MSI GTX 660 OC mit TwinFrozr III
6Gb DDR 3 RAM
AMD Phenom II X4 B55 @ 3,6GHz
Windows 7 Home Premium 64-bit

Re: Eigene Updateroutine fürs Programm

Beitrag von Chimorin »

Ich habe bei vielen Programmen dies hier gesehen:
Ein anderer Weg wäre: A - Original Exe, B - Update Exe, C - umbenannte original Exe
Man startet B, was so ne Art Launcher ist. B schaut nach Updates und installiert diese ggfs.
B startet A.
Bild

- formerly known as Bananenfreak -
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: Eigene Updateroutine fürs Programm

Beitrag von Bisonte »

A = Original.exe
B = Updater.Exe

A wird gestartet
- Lösche B wenn vorhanden
- Check auf Update.
- Wenn Update - Download B - Starte B - A beenden

B wartet das A beendet ist.
B bennent A um
B lädt neue A herunter

Wenn Download richtig, lösche Umbenanntes A - Starte A

Ansonsten lösche Neues A
Umbenennen Alt A zu A und starte A

Edit : Ungefähr so

Code: Alles auswählen

;: Hauptprogramm

#Revision = 1001

ServerRevision = #Revision

If FileSize("Update.exe") > 1
  DeleteFile("Update.exe)
EndIf

InitNetwork()

If ReceiveHTTPFile("http://www.meineWebAdresse.de/version.txt", "version.txt")
  If ReadFile(0, "version.txt")
    ServerRevision = Val(ReadString(0))
    CloseFile(0)
  EndIf
  DeleteFile("version.txt")
EndIf

If ServerRevision > #Revision
  
  If ReceiveHTTPFile("http://www.meineWebAdresse.de/update.exe", "update.exe")
    RunProgram("update.exe")
    End  
  EndIf
  
EndIf

; Weiter im Programm

Code: Alles auswählen

;: Update.exe

;: umbenennen
Rename("Main.exe", "OldMain.exe")

If ReceiveHTTPFile("http://www.meineWebAdresse.de/update.exe", "Main.exe") ; Download der neuen Exe
  DeleteFile("OldMain.exe") ; Wenn ok, dann alte exe löschen
Else
  DeleteFile("Main.exe") ; Reste löschen wenn vorhanden
  Rename("OldMain.exe", "Main.exe") ; umbenennen - damit wieder alles beim alten ist
EndIf

RunProgram("Main.exe") ; wieder hauptprogramm starten

End
Der Anwender startet wie gewohnt sein Programm, und muss nicht ein "Extra" Update Programm starten.
Oma Gerda freut sich dass alles von alleine geht ;)

Wobei man am besten (unter Windows zumindest) alles im Windows Temp Ordner macht (den Download usw.), und die Updater.exe mit AdminRechten
starten sollte. (Wer weiss wo Oma Gerda das Hauptprogramm hingeschoben hat)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten