![]() |
Prüfmethoden für Updates
Hallo,
nach einer längeren - berufsbedingten - Abstinenz von Delphi, melde ich mich nun wieder zurück! Ich überlege gerade, ob es nicht an der Zeit wäre, meinen bis jetzt funktionierenden Updater etwas zu verbessern und wollte mich daher mal nach anderen Funktionsweisen erkundigen. Derzeit funktioniert mein Updater wie folgt: Es wird lokal geprüft, welche Programmdateien existieren, welche Versionsinformation jeweils einkompiliert wurde und dazu noch der md5-Hash einer Datei erzeugt. Danach wird auf dem Update-Server eine ini-Liste heruntergeladen und die lokale mit remote-Liste abgeglichen. Alle Dateien, die remote einen anderen md5-Hash, eine andere Versionsnummer haben oder lokal nicht existieren, sind sind upzudaten. Ich dachte damals, dass man so manipulationen an Dateien ausschließen kann. Doch irgendwie scheine ich der einzige zu sein, der Updates am md5-Hash ermittelt. Gibt es einen Grund dafür, welche andere Systeme/Merkmale gibt es, wie handhabt ihr die gesamte Update-Prozedur (von Erstellen/Publizieren, bis zur Prüfung und Installation). Mal wieder "Danke im Voraus" |
AW: Prüfmethoden für Updates
Och, ich glaub nicht, daß du da der Einzige bist, mit dem MD5 Hash. :angel:
Andere Merkmale: - Dateidatum (Erstellung/Änderung) und Dateigröße - Versionsinfo in der Datei (zumindestens bei den EXEn und DLLs, oder wo man noch Extra-Infos aus der Datei auslesen kann, wie z.B. JPEG und MP3) Manche gucken aber garnicht in die Datei. Vielleicht die installierte Programmversion aus der Registry oder einer INI lesen und dann blind alles runterladen, wenn es eine neue Programmversion gibt Wobei sich ja einige Dateien/Programme selber prüfen, z.B. über eine Signatur, so daß man selber den Hash weglassen könnte, also nur auf die Versionsinfo gucken, und den "Hash" erst zur Laufzeit prüfen lässt. |
AW: Prüfmethoden für Updates
Zuerst die Steuerdatei herunterladen; wenn das nicht klappt braucht man gar nicht erst weitermachen.
Dann Dateilänge vergleichen zwischen lokaler Datei und dem Wert in der Steuerdatei. Bei Abweichung braucht man den Hash nicht mehr zu prüfen. Hashverfahren: * MD4 - ist schneller als MD5, kann aber leichter gefälscht werden. Bei einem normalen Updater dürfte das aber kein Problem sein * MD5, SHA1 - für Updater gut geeignete Standardverfahren. * SHA256 - für erhöhte Scherheit * CRC32 - schnell, aber der Hashraum ist mit 32 Bit zu klein Nach dem Herunterladen nochmals den Hash ermitteln um Übertragunsfehler auszuschliesen. Alle Dateien zuerst in temporäres Verzeichnis runterladen damit man bei einem Verbindungsabbruch nicht mit einer unvollständigen Installation dasteht. Erst nachdem alle notwendigen Dateien heruntergeladen wurden die lokalen Dateien updaten. PS: es empfiehlt sich das Hashverfahren mit einem fremden Tool zu überprüfen. ![]() |
AW: Prüfmethoden für Updates
Zitat:
Und das mit dem halben Update: Es ist möglich die Datei- und Registryzugriffe in einer Transaction zu behandeln. (zumindestens im NTFS, wo sonst auch, weiß ich nicht) Auch bietet Windows einen netten Hintergrundübertragungsdienst an, für Download/Updates, was bei größeren Programmen recht nett ist, da wird Windows gebeten die Datei zu laden und wenn sie da ist, wird das eigene Programm darüber informiert/gestartet. Und ich finde es immer wieder krank, daß Updater sich als eigener ständig laufender Service installieren, wo doch ein Updater schöner wäre, wenn er sich als geplanter Task anmeldet, welcher z.B. einmal am Tag/Woche/Monat kurz gestartet wird, bzw. z.B. auch beim Start des Computers. (k.A. warum vorallen bei großer Software sowas nicht endlich mal durchsetzt und eventuell auch über einen gemeinsamen Updater, damit nicht jedes Programm selber nachsehn muß) > regelmäßig und bei passenden Events starten lassen > schauen ob es ein Update und eventuell mit Installation vergleichen > wenn nichts los ist, dann gleich wieder beenden > Windows das runterladen lassen > Update-Quelldateien prüfen > Programm-Installation prüfen (Dateien korrekt und Programm eventuell nicht aktiv, falls der Updates dann nicht möglich wären) > Transaktion starten > Installation/Update starten > eventuell nochmal alles prüfen > Transaktion abschließen oder bei einem Fehler zurücksetzen > fertig Bei einer Transaktion könnte man das vorherrige Prüfen sich auch sparen, also die Dateien nicht doppelt behandeln und einfach gleich alles machen ... bei einem Problem lässt es sich ja wieder komplett zurücksetzen und bei der vorherrigen Prüfung vergisst man sowieso bestimmt irgendeinen SonderProblemfall. :stupid: |
AW: Prüfmethoden für Updates
In dem Fall kann dann auch der Updater selber strunz-doof sein (Auf neue Version prüfen, Setup laden, Setup ausführen) und der wird auch das wildeste Update hinbekommen - weil diese Aufgabe das Setup übernimmt. |
AW: Prüfmethoden für Updates
Hello!
Danke für die Antworten. Also handhaben wir das alle ähnlich/gleich. Allerdings gefällt mir die Idee mit einer "Setup"-Datei, welche die Update-Daten beinhaltet. Das erspart wirklich sehr viel Arbeit und mit Inno-Setup lässt sich ja auch viel Logik umsetzen. So kann man bequem Rollouts veröffentlichen, ohne vorher umständlich ein Update schnüren und verschiedene Dateien in verschiedene Verzeichnisse hochladen zu müssen. Ich glaube, das werde ich in Zukunft so machen. Nur eine Frage habe ich trotzdem noch: Macht es Sinn bzw. hat es nennenswerte Vorteile, die Hashes der Programmbestandteile mit den Online-Hashes abzugleichen, oder reicht wirklich die Speicherung der Versionsnummer? Ich tue mich mit dem Gedanken schwer, die Hashes nicht zu vergleichen. Einerseits kann es sein, dass die Versions-Datei nicht den reellen Wert wiedergibt. Zudem werden Benutzer vllt. doch davon abgehalten, an den Dateien Manipulationen vorzunehmen, da sie sonst keine Updates mehr machen können. Was denkt ihr dazu? |
AW: Prüfmethoden für Updates
Ich sehe persönlich nicht so den Sinn, beim Updaten die Hashes zu vergleichen. Du musst jedes mal alle Programmdateien einlesen, selbst wenn sich beim Update nur eine Datei geändert hat. Das macht den Update-Vorgang unnötig langsam und rechenintensiv.
Wenn der Nutzer unbedingt an den Dateien rumpfuschen will, dann soll er doch. Überhaupt sehe ich das eher als eigenständiges Problem an. Wenn du es wirklich verhindern willst, dass der Nutzer die Dateien verändert, dann solltest du es regelmäßig prüfen, und nicht nur beim Updaten. |
AW: Prüfmethoden für Updates
Warum getrennt?
Warum als Dienst? Eine Update.Exe als Resource mit in die Exe. Hauptprogramm "kennt" seine eigene Version und die der DLL's Dateien runterladen, Update.exe auf die Platte schreiben und mit Admin Rechten starten. Mavarik |
AW: Prüfmethoden für Updates
DLL-Abhängigkeiten, Versionitis usw. bleiben bei einer selbstgebauten Lösung auf der Strecke.
Man vergleicht die Hashs nicht wegen der Manipulation, sondern ob ein Update überhaupt stattfinden muss. Einige verwenden die Versionsnummer oder das Datum, aber eine allgemeine Lösung wird eben den Hash nehmen bzw. ihn anbieten. Wieso soll ich als Programmierer gezwungen sein, eine Versionsnummer einzuführen? Was ist, wenn sich die Größe nicht ändert, weil ja nur der MwSt-Satz von 19 auf 20% erhöht wurde? Was ist, wenn das Erstelldatum der Datei immer der 18.3.1963 ist, weil der Chef das so will? |
AW: Prüfmethoden für Updates
Zitat:
z.B. siehe Firefox Der Firefox schaut nach, ob es eine neue Version gibt (anhand der Versionsnummer), läd das Setup runter und übergibt es dann an den Service, welcher standardmäßig inaktiv ist und dann manuell vom Firefox gestartet wird, falls nötig. Der Sevice übernimmt nun das Installieren und somit ist keine Adminabfrage mehr nötig. (z.B. für Rechner, wo der Benutzer keine Adminrechte besitzt) |
AW: Prüfmethoden für Updates
Zitat:
Ne Spass bei Seite... Aber wenn eine Software XY immer einen Dienst installieren würde... No go... Mavarik |
AW: Prüfmethoden für Updates
Joar, drum wäre es schon schön, wenn sich mehrere Programme einen gemeinsamen Updater teilen würden.
Aber Firefox/Thunderbird nutzen einen "gemeinsamen" Service, welcher standardmäßig inaktiv ist und so keinerlei Resourcen verbraucht (außer auf der Festplatte) und der sich nach dem Update auch wieder beendet. > Mozilla Maintenance Service > Starttyp = manuell > wird bei Bedarf vom Firefox gestartet, nachdem das Update gefunden und runtergeladen wurde Im Gegensatz dazu z.B. der schrottige Acrobat-Updater (OK, nach einer Woche Laufzeit 00:00:00 CPU und knapp 4 MB RAM, aber wenn das jeder so macht, dann läppert es sich dennoch) > Adobe Acrobat Update Service > Starttyp = Automatisch > immer durchgehend aktiv Der Adobe-Flash-Updater ist aber auch standardmäßig aus. :gruebel: Der Windows Update Service liegt dabei schon bei 'ner 1/4 Stunde und belegt 50 MB. Bei 10 solchen Updatern wäre das ja nur ein halbes GB und fast 3 Stunden verschwendete Rechenzeit = 22 Minuten pro Tag. Und so selten wie ich OpenOffice verwende, hab ich erstmal deren mistigen Beschleinigungsdienst entfernt (so wie auch von anderen Programmen), welcher deren Dateien schön im Cache hält und so andere Dinge runterwirft, nur um dann schneller starten zu können. |
AW: Prüfmethoden für Updates
Es ist in gewissen Szenarien sinnvoll im Update/Setup die Hashs aller ausgelieferten Dateien mitzuführen und vor dem Update zu prüfen.
Auf diese Weise kann man z.B. feststellen ob ausgelieferte Dateien verändert wurden. Evtl. hat es die Anwender ja viel Mühe gekostet diese anzupassen. |
AW: Prüfmethoden für Updates
Zitat:
Deshalb kann das ja optional sein, aber standardmäßig ist das besser als ohne. |
AW: Prüfmethoden für Updates
Bei Programman die man oft nutzt, die ständig neuen Gefahren ausgesetzt sind und die man standardmäig sowieso immer aktuell halten sollte, ist ein AutoUpdater schon sinvoll.
(der sich auch abschalten lässt, für die, welche unbedingt nicht wollen) > das UAC stört nicht ständig > und die ohne nötige Rechte ... da muß immer jemand Anderes das machen > ohne UAC müsste man ständig manuell nachsehn |
AW: Prüfmethoden für Updates
Wie immer kommt es auf den Einzelfall an:
a) Kommerzielle Software, die auf anonymen Rechnern mit diversen Rechteszenarien läuft? b) LOB-Software im Betrieb in einem homogenen Sicherheitskontext? c) Individualsoftware bei wenigen Kunden? An einen Update-Service würde ich bei b) und c) nicht mal denken (d.h. ausschließen aber auch nicht). Selbst bei a) würde ich persönlich von einem Dienst abraten, einfach weil ich die Rechner der Kunden mit Zusatzprogrammen nicht zumüllen will. Natürlich haben die ihre Berechtigung und es ist nur dieses sehr subjektive Argument, welches mich zum 'Gegner' von Updateservices macht. |
AW: Prüfmethoden für Updates
Hallo und danke für die vielen Antworten. Konnte leider nicht eher antworten - was das Wochenende im Urlaub.
Einen Update-Service werde ich nicht programmieren/installieren. Update-Dienste halte ich nur bei Programmen sinnvoll, die weit verbreitet und beliebte Angriffsziele sind, z.B.: Flash, Java, Browser etc. Ich habe mich entschieden, die Updates über einen Installer auszurollen. Bei Programmstart wird die aktuell installierte Version über eine Datei ausgelesen, mit dem Server verglichen und das dazugehörige Update heruntergeladen. Die Installationsdatei wird geöffnet und erledigt die notwendige Logik. Der Updater ist also - wie vorgeschlagen - "dumm". Um Manipulationen zu verhindern, wird das jeweilige Programm die Hashes in zufälligem Intervall vergleichen. Dabei soll dies keine Umsetzung eines Kopierschutzes sein. Im Vergleich zu meiner bisherigen Lösung sollte diese nun viel leichter zu verwalten sein. Zwar war die Prüfung pro Datei eine funktionierende Lösung, aber wirklich umständlich zu benutzen. Demnach wird es demnächst so von statten gehen:
Habe ich etwas wichtiges vergessen oder nicht bedacht? Das müsste doch eigentlich so in Ordnung und dennoch recht flexibel sein, oder? Danke! |
AW: Prüfmethoden für Updates
Gibts da nix Fertiges? Wenn nicht, wäre das nicht mal ne Idee?
|
AW: Prüfmethoden für Updates
Ich habe schon mal was fertiges gesehen, aber ich glaube, das kostet Geld. Ich programmiere das mal soweit fertig, wenn Interesse besteht kann ich es ja vllt. teilen.
|
AW: Prüfmethoden für Updates
Zitat:
![]() Das Windows Update lässt sich auch übrigens erweitern, allerdings kann ich nicht sagen ob das wirklich für eigne Updates taugen wird (ohne Domäne). |
AW: Prüfmethoden für Updates
Hallo,
Zitat:
Unterscheidungsmerkmal ist dabei die Build-Nummer, d. h. bei jeder Programmversion, die veröffentlicht wird, muss zwingend die Buildnummer erhöht werden. Setups werden auch mit Innosetup erzeugt. Das Programm startet nach dem Herunterladen das Setup im Silent-Modus, d. h. das Setup läuft zwar sichtbar, aber ohne Eingriffsmöglichkeit (ist ja nur ein Update) durch und startet danach das Programm wieder. Das alles läuft seit ca. 5 Jahren ohne Probleme. Gruß Frank |
AW: Prüfmethoden für Updates
@Frank "Zwischenzeitlich sind neue Beiträge geschrieben worden."
So grob wie das DJ-SPM hier beschreibt hab ich das hier am Laufen - nur erstmal nur im Intranet. Ach ich verwende innosetup für die "donkey work". Ich verzichte/vereinfache ein paar Dinge. Es gibt bei mir kein einständiges Update-Hilfs-Programm, sondern der Update.ini check machen die Programme selbst, in einem extra Threads (Objekt Orientiert). Innosetup führt schon eine Integritätsüberprüfung selbständig durch, schlecht ist aber auch nicht das nochmal zu kontrollieren. Es besitzt ein silent bzw. ein verysilent Installations-Modus, von dem ich regen Gebrauch mache (Parameter stehen in den Update.ini(s)) , außerdem lassen sich weitere Kommandozeilenparameter auswerten, die am Ende des automatischen Setups das Programm wieder selbständig starten lässt, zusammen mit einem Kommandozeilenparameter (‚/update‘), der wiederum dafür sorgt, dass eine Erfolgsmeldung angezeigt wird, die der Anwender nur noch ab nicken brauch. Der Vorgang dauert im Allgemeinen hier nur wenige Sekunden. Es gibt auch keine Zwei verschiedene Setup.exe(s) sondern update - und reguläres Setup ist ein und dieselbe Datei. Mit Innosetup brauch man auch nicht unbedingt in das Programm-Files, sondern automatisch unter appdata installieren, wenn der Anwender eh keine Admin-Rechte besitz, so brauch man auch niemanden bei jedem Update zu Bitten und Betteln. |
AW: Prüfmethoden für Updates
Zitat:
![]() Die Auslieferung erhöht die Hauptversions-, Nebenversions- oder Revisions-Nummer. Die Buildnummer ist hier eher unwichtig. Zur Auslieferung wird dann im VCS auch ein entsprechendes Tag gesetzt (1.0.0, 1.0.1, 1.1.0, ...) |
AW: Prüfmethoden für Updates
Hallo,
@Thomas K: Ich hatte keinen roten Kasten. Ansonsten verwende ich auch nur eine Setup.exe die nach Bedarf mit Parametern aufgerufen wird. Gruß Frank |
AW: Prüfmethoden für Updates
Zitat:
|
AW: Prüfmethoden für Updates
Hallo,
Zitat:
Gruß Frank |
AW: Prüfmethoden für Updates
So, mein Updater ist nun fertig. Ich werde ihn noch etwas testen und dann - wenn Interesse besteht - mit euch teilen. Ich habe eine Demo-Applikation geschrieben, ein RolloutMaker zum Erstellen von Updates und alles ist via DoxyGen dokumentiert.
Der Updater, bestehend auf 4 Klassen, kann derzeit folgendes:
Das waren jetzt alle Highlights, glaube ich. Klar kann man immer etwas verändern, aber so funktioniert es erstmal. Bei Interesse lade ich es gerne mal hoch. Auf diesem Wege möchte ich damit erstmal für die Hilfe, Anregungen und Ideen bedanken. |
AW: Prüfmethoden für Updates
Ersetzt Du die Dateien direkt? Was passiert beim Verbindungsabbruch? Funktioniert dann alles noch?
Oder war das nur missverständlich formuliert? Zitat:
|
AW: Prüfmethoden für Updates
Um noch einmal den Streitpunkt "Update als Service" aufzugreifen:
Welche Möglichkeit gibt es denn noch, es dem Benutzer einer Anwendung so einfach wie möglich zu machen? Als Beispiel, meine Anwendung besteht aus einem Service, der irgendwo auf einem Server rumdümpelt. Der hat manchmal nicht mal einen gescheiten Monitor, geschweige denn kommt da jeder Anwender ran. Meine Idee ist nun, einen zweiten Update-Service daneben zu installieren, der den Hauptdienst überwacht ,ggf beendet und aktualisiert. (Meinetwegen auch per anstubsen vom Benutzer) Mit dem Update werden noch die Client-Pakette bereitgelegt, die sich dann die Clients beim nächsten Anmelden über einen Starter vom Server herunterladen und installieren. So hab ich doch ein recht gutes System, was sich selbst verteilt und sehr wenig Eingriffe vom Benutzer benötigt. Die haben nämlich in der Regel keinen Admin an der Seite. Ich würde sogar noch soweit gehen, das der Updater von uns als Anbieter ferngesteuert werden kann, wenn der Kunde das möchte (in der Regel stimmen sie zu, sie wollen so wenig wie möglich machen, außer einfach die Software verwenden). Mit noch ein paar kleinen Tests könnte man die Installation noch auf Fehler prüfen und wir können eingreifen. Aber wenn wer noch eine andere Idee hat, ich bin interessiert. |
AW: Prüfmethoden für Updates
Hallo,
ich würde Interesse an dem Updater anmelden. Gibt es irgendwo ein Repository oder einen Link, wo ich ihn herunterladen kann? Danke Gruß Christian Das waren jetzt alle Highlights, glaube ich. Klar kann man immer etwas verändern, aber so funktioniert es erstmal. Bei Interesse lade ich es gerne mal hoch. Auf diesem Wege möchte ich damit erstmal für die Hilfe, Anregungen und Ideen bedanken.[/QUOTE] |
AW: Prüfmethoden für Updates
Du antwortest auf einen Beitrag von 2015.
Ich glaube die Diskussion ist nicht mehr zeitgemäß. Entweder werden APPs durch die entsprechenden Shops aktualisiert oder durch Paketmanager wie chocolatey. Du kannst dir sowas aber auch einfach selbst bauen: ![]() |
AW: Prüfmethoden für Updates
Zitat:
Das gilt vielleicht für die "walled Garden" Betriebssysteme und Linux aber nicht für Windows. Und schon gar nicht für Win32 Programme, wie man vor kurzem lesen konnte. |
AW: Prüfmethoden für Updates
Zitat:
![]() |
AW: Prüfmethoden für Updates
MS hat aber auch keine andere Wahl.
Gut, man hatte quasi versucht damit die Entwickler zu einer bestimmten Platform zu drängen, aber für die Akzeptanz eines Shopsystems müssen sie andere etablierte Platformen auch unterstüzen. Ansonsten holen sich die fremden Paketmanager immer mehr Marktmacht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz