AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Programm-Update: Dateien löschen

Ein Thema von Gausi · begonnen am 21. Jan 2023 · letzter Beitrag vom 10. Apr 2023
Antwort Antwort
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#1

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 11:55
Wenn Du eine Stringliste einkompilierst könntest Du eventuell auch diesen Ansatz erweitern.

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.

Damit ist nach dem ersten Start von NEMP.EXE aufgeräumt und für die Zukunft keine weitere Prüfung erforderlich.

Ob das Löschen der eigenen EXE, das Umbenennen einer zweiten EXE auf den eigenen Dateinamen und deren anschließender Start so ohne weiteres möglich ist, weiß ich nicht. Habe das zwar schonmal realisiert, aber es hat nicht immer zwingend funktioniert.

Das Problem kann man aber mit Hilfe einer temporären Batchdatei lösen.

NEMP.EXE räumt auf.
Erstellet Batchdatei.
Startet Batchdatei.
Beendet sich.
Batchdatei löscht NEMP.EXE
Batchdatei benennt NEMP_NEU.XXX um
Batchdatei startet NEMP.EXE
Batchdatei löscht sich.

Gorb sowas:
Code:
:REM Fuenf Sekunden Pause machen, damit NEMP Zeit zum Beenden hat.
@PING -n 5 127.0.0.1 > nul
:REM Das Aufraeumprogramm loeschen
@DEL NEMP.EXE
:REM Die neue EXE umbenennen
@REN NEMP_NEU.XXX NEMP.EXE
:REM und dann starten,
:REM damit die Batchdatei nicht bis zum Beenden von NEMP.EXE
:REM weiter laeuft, wird per START gestartet.
@start NEMP_NEU.XXX
:REM Batchdatei loescht sich selbst.
@DEL %0
Wenn die Batchdatei minimiert per ShellExecute gestartet wird, sollte das, aus Anwendersicht, unbemerkt ablaufen, lediglich der erste Start wirkt verzögert.

Eine "dauerhafte Aufräumänderung" des eigentlichen Programmes oder eine "dauerhafte Aufräumprüfänderung" im Player wäre damit entbehrlich.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.645 Beiträge
 
Delphi 12 Athens
 
#2

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 13:28
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.
Funktioniert eventuell aber auch nur mit Admin-Rechten.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#3

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 13:39
Zitat:
PING
https://learn.microsoft.com/de-de/wi...mmands/timeout
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#4

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 13:52
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.
Funktioniert eventuell aber auch nur mit Admin-Rechten.
Bei 'ner portablen Version würd' ich das eher nicht erwarten, zumindest hab' ich die immer auf 'nem externen Datenträger und nicht in dem Bereich, bei dem Windows die Rechte etwas strenger kontrolliert.

Frei nach dem Motto: In einem Verzeichnis, in das ich 'ne ZIP extrahieren kann, hab' ich wohl Schreibrechte und kann dann dort (hoffentlich) auch Dateien löschen.

Aber: Eine zwingend immer funktionierende Lösung des Problemes wird es nicht geben.

Auch das Löschen von Dateien aus dem Programm heraus ist (ebenfalls aus Rechtegründen) nicht zwingend möglich. Dann würde das Programm bei jedem Start versuchen die Dateien zu löschen und dabei scheitern oder man müsste sich "irgendwo" merken, dass der erste Versuch fehlgeschlagen ist und man weitere Versuche dann unterlässt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.375 Beiträge
 
Delphi 12 Athens
 
#5

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 14:30
Aber: Eine zwingend immer funktionierende Lösung des Problemes wird es nicht geben.
einfach das Admin-Manifest ins Programm
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.684 Beiträge
 
Delphi 5 Professional
 
#6

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 14:48
Meiner Meinung nach kann man sich für eine portable "Installation" schon die Frage stellen "Kann man dem Anwender einer portablen Anwendung zumuten, nach dem Entpacken ein Skript auszuführen?". Wenn die Antwort darauf "Ja" lautet, würde ich einfach ein Skript zusammenbasteln, das die nötigen Aufgaben erledigt, in diesem Fall nicht mehr benötigte Dateien löscht. Selbst mit einem Batchskript kann man sowas recht komfortabel machen:
Code:
@echo off
setlocal

set "files=somefile.exe someotherfile.txt someold.dll"

for %%F IN (%files%) DO (
    if exist "%~dp0%%~F" (
        echo Deleting "%~dp0%%~F"
        del "%~dp0%%~F"
    )
)
endlocal
Die Liste der Dateien kann man einfach erweitern/bearbeiten.

Für die reguläre Installation übernimmt diese Aufgabe natürlich das Setup.

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
905 Beiträge
 
Delphi 12 Athens
 
#7

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 15: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 ...
Being smart will count for nothing if you don't make the world better. You have to use your smarts to count for something, to serve life, not death.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.558 Beiträge
 
Delphi 7 Professional
 
#8

AW: Programm-Update: Dateien löschen

  Alt 22. Jan 2023, 15:21
Ok, dann kann man auch jedes Mal nachgucken, ob ein bestimmter Job irgendwann schon erledigt wurde oder eben nicht und ihn dann ausführen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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-2025 by Thomas Breitkreuz