Updater als Starter - die Nummer steht im Dateinamen

Sein Bild (06.09.2026):
  "der updater schaut beim starten erst: ist auf dem git link eine neue version
   mit exe? wenn ja, erst laden, ersetzen und dann starten."
  "einmal pruefen auf vollstaendigkeit."
  "wir werden den namen mit nummer fuehren - wenn er merkt, eh warte mal, die
   heisst anders, dann neu machen"

DER AUFBAU

Der Updater IST der Starter. Er laeuft, BEVOR das Programm laeuft - damit gibt
es das Windows-Problem "laufende EXE laesst sich nicht ersetzen" gar nicht.

Und weil die installierte Datei die Nummer im Namen traegt
(Rechnungstool-1.6.0.exe), wird ueberhaupt nichts ueberschrieben: eine neue
Fassung ist eine neue Datei. Die vorige bleibt liegen und ist damit die
Rueckfallebene, ohne dass jemand eine Sicherung anlegen muesste. Der Updater
sieht am NAMEN, was da ist - er muss keiner Angabe glauben.

version.py: die Nummer an EINER Stelle, im Code, in die EXE kompiliert. Sie
entspricht dem Release-Tag ohne "v". Zusaetzlich fuehrt der Updater ein eigenes
Buch (installiert.json); wer eine Datei umbenennt, verursacht hoechstens einen
ueberfluessigen Download.

BEIM BAUEN AUFGEFALLEN

/releases/latest liefert NICHTS, weil alle Fassungen als Vorabversion
gekennzeichnet sind - Forgejo laesst Vorabversionen dort aus. Der Updater nimmt
deshalb die Liste und sucht selbst die hoechste Nummer. Waere das erst beim
Nutzer aufgefallen, haette der Updater nie ein Update gefunden.

Beide Repositories sind oeffentlich - kein Token noetig. Ein Token in einer
verteilten EXE waere ohnehin keins.

VOLLSTAENDIGKEIT

Geladen wird in einen Zwischenordner. Erst wenn GROESSE und (falls das Release
eine .sha256 anhaengt) PRUEFSUMME stimmen, kommt die Datei in den
Installationsordner. Sonst wird verworfen und die vorhandene Fassung gestartet -
lieber kein Update als ein kaputtes.

PRUEFSTAND

pruef_updater.py prueft vor allem, wann NICHT aktualisiert werden darf: gleiche
Fassung, aeltere im Netz, kein passender Anhang, Entwurf, kein Netz, falsche
Groesse, falsche Pruefsumme. Und den wichtigsten Punkt: eine halbe Datei
erreicht den Installationsordner nie.

Alle 18 Pruefstaende gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
TheMockTv 2026-09-06 16:42:35 +02:00
parent 05ec56e4b8
commit fec0e8449c
3 changed files with 595 additions and 0 deletions

23
version.py Normal file
View file

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
"""Die Fassung dieses Programms - an EINER Stelle.
Wozu
----
Ohne eine Nummer im Programm kann kein Updater vergleichen, ob das, was im
Repository liegt, neuer ist als das, was hier laeuft. Sie steht deshalb hier
und NUR hier; alles andere (Info-Dialog, Updater, Release) liest sie von hier.
Regel
-----
Die Nummer wird beim Ausliefern erhoeht und entspricht dem Release-Tag ohne das
"v": Tag `v1.6.0` -> VERSION "1.6.0". Wer das eine ohne das andere aendert,
baut dem Updater eine Falle.
"""
VERSION = "1.6.0"
# Zu welchem Repository dieses Programm gehoert - der Updater sucht dort.
REPOSITORY = "TheMockTv/rechnungstool"
# Wie die ausgelieferte Datei im Release heisst.
EXE_NAME = "Rechnungstool.exe"