Einzelnen Beitrag anzeigen

Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 16:09
Deine Programm heißt NEMP.EXE.
Die bisherige NEMP.EXE benennst Du im ZIP um, z. B. NEMP_NEU.XXX.
Du erstellst ein neues Programm NEMP.EXE für die Aufräumarbeiten.
Diese Programm wird der Anwender (gewohnheitsgemäß, per ShortCut, Link, ...) starten.
Das Programm räumt beim Start auf, löscht die eigene EXE (also NEMP.EXE), benennt NEMP_NEU.XXX um in NEMP.EXE und startet diese.
Das sind so Tricksereien, die ich eigentlich vermeiden will. Wenn man das für den Anwender transparent macht, und ihm sagt "Hör mal, ruf bitte das CleanUp-Tool auf, weil der Entwickler früher Murks programmiert hat ein paar Dutzend Dateien doppelt und dreifach auf die Platte kopiert hat ..." - oder halt ein CleanUp-Script wie das von Dalai, dann fände ich das eine solide Möglichkeit, die ich mir auch nochmal näher durch den Kopf gehen lassen werde.

Mein aktueller Plan sieht aber so aus, das direkt in der eigentlichen exe zu machen:
  • Neue Unit, die im Wesentlichen besteht aus
    const OutdatedFiles: Array[0..30] of String = ( ...); und einer Prozedur DoCleanUp
  • einen Eintrag in der Ini: LastCleanUpVersion=...
  • eine Abfrage
    Delphi-Quellcode:
    if (LastCleanUpVersion < NeededCleanUpVersion) then begin
      DoCleanUp; // ggf. mit Frage an den Benutzer? ggf. Aufruf-Möglichkeit später im Einstellungsdialog an geeigneter Stelle?
      UpdateIni; // auf jeden Fall, egal obs erfolgreich war oder nicht. Im Zweifel: RTFM!
    end;

Wenn ich das richtig sehe, kommt beim regulären Startvorgang dann ein Aufruf von Ini.ReadInteger/String hinzu, sowie ein Vergleich (ob ich da nun ein Integer nehme, oder ein String mit Major.Minor.Patch ist ja auch wurscht).

Beim Start werden aktuell an halbes Dutzend Plugins für die bass.dll geladen, eine mehrere MB große Binärdatei geparsed, daraus mehrere verschachtelte Dictionaries mit zehntausenden Einträgen erstellt - da ist das vollkommen egal. Eine ähnliche Abfrage habe ich ja auch für den Start des "Wizards" drin, der einmalig einige Opt-In-Einstellungen abfragt. (Das dann inklusive Zeug wie "Die Einstellung, dass der Wizard gestartet wurde, kann gespeichert werden.")

Und etwas überflüssiger Code wegen ein paar Strings und einer File-Delete-Routine? Ja nu. Der Player überprüft bei jedem Abspielen die Dateigröße der mp3 auf einen ganz bestimmten Wert, berechnet im Zweifel die MD5-Hashsumme der Datei, und wenn diese einen ganz bestimmten Wert hat, dann wird die mp3-Datei in ihre einzelnen Frames zerlegt, die Audiodaten (abzüglich der mpeg-Header) als Brainfuck-Programm interpretiert, das eine neue mp3-Datei auf Platte schreibt und diese dann anstelle der eigentlichen Datei abspielt ...
The angels have the phone box.
  Mit Zitat antworten Zitat