![]() |
Programm-Update: Dateien löschen
Ich stehe vor der etwas blöden Situation, dass beim nächsten Update meines Players (ist noch ne ganze Weile hin, aber der problematische Teil in dem Kontext ist fast fertig) ein paar Dateien überflüssig werden. Die sollen dann weg. Problem ist, dass ich einerseits eine Setup.exe habe (da kann ich ja bei InnoSetup beim Installieren eine Liste von Dateien angeben, die ggf. vorher gelöscht werden sollen), aber auch ein einfaches Zip-Archiv zum entpacken und loslegen (portable Software, ohne Installation). Wenn der User da einfach das neue Archiv in das vorhandene entpackt, bleiben die alten Dateien natürlich erhalten.
Ich sehe da irgendwie keine wirklich schöne Lösung. :gruebel:
|
AW: Programm-Update: Dateien löschen
Du könntest eventuell eine Batchdatei mit ins ZIP packen, die alle Aufräumarbeiten durchführt und sich dann am Ende selbst löscht. Dein Programm müsste dann prüfen, ob die Batchdatei vorhanden ist. Wenn ja, wird sie ausgeführt. Dies führt dazu, dass beim ersten Programmstart einmal aufgeräumt wird.
Nachteil: Es wird quasi auf Ewig (bei jedem Programmstart) geprüft, ob die Batchdatei vorhanden ist. |
AW: Programm-Update: Dateien löschen
Zitat:
Hans |
AW: Programm-Update: Dateien löschen
Zitat:
Sinnvoller wäre eine Lösung, die automatisch einmalig ausgeführt wird und anschließend auch keine Prüfung mehr erfordert, ob sie nun ausgeführt wurde oder nicht. |
AW: Programm-Update: Dateien löschen
Hallo,
warum löschst Du die nicht beim Starten der neuen Software ? MfG |
AW: Programm-Update: Dateien löschen
Zitat:
Beim Installer fällt das jedoch auch wieder raus - denn wenn der Player nach c:\Programme\ installiert wird, dann kann man da nachträglich nichts mehr löschen (zumindest nicht ohne weiteres). Und natürlich hat man dann dauerhaft die Abfrage drin, ob das noch getan werden muss - aber ein Value aus der Ini-Datei zusätzlich auswerten sollte den Start nicht verzögern. :lol: D.h. es wird wohl eine Kombination aus "Installer räumt beim Installieren auf" und "exe aus der Zip räumt beim ersten Start auf". Ob letzteres ne Batchdatei wird, oder eine kleine eincompilierte Stringlist, deren Einträge in einer Schleife gelöscht werden, muss ich nochmal schauen. Falls noch jemand andere Vorschläge hat - immer her damit. 8-) |
AW: Programm-Update: Dateien löschen
Wenn du kein Setup nutzt, welches das löschen könnte,
dann mach es doch einfach beim nächsten Start des Programms. [edit] ups, vergessen zu aktualieren :freak: |
AW: Programm-Update: Dateien löschen
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:
Wenn die Batchdatei minimiert per ShellExecute gestartet wird, sollte das, aus Anwendersicht, unbemerkt ablaufen, lediglich der erste Start wirkt verzögert.
: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 Eine "dauerhafte Aufräumänderung" des eigentlichen Programmes oder eine "dauerhafte Aufräumprüfänderung" im Player wäre damit entbehrlich. |
AW: Programm-Update: Dateien löschen
Zitat:
|
AW: Programm-Update: Dateien löschen
|
AW: Programm-Update: Dateien löschen
Zitat:
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. |
AW: Programm-Update: Dateien löschen
Zitat:
|
AW: Programm-Update: Dateien löschen
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:
Die Liste der Dateien kann man einfach erweitern/bearbeiten.
@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 Für die reguläre Installation übernimmt diese Aufgabe natürlich das Setup. Grüße Dalai |
AW: Programm-Update: Dateien löschen
Zitat:
Mein aktueller Plan sieht aber so aus, das direkt in der eigentlichen exe zu machen:
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 ... :stupid: |
AW: Programm-Update: Dateien löschen
Ok, dann kann man auch jedes Mal nachgucken, ob ein bestimmter Job irgendwann schon erledigt wurde oder eben nicht und ihn dann ausführen.
|
AW: Programm-Update: Dateien löschen
Zitat:
RarSfx Technik o.ä. zum Einsatz kommen lassen. (da kannst du befehle integrieren, ähnlich einem Setup.exe Programm) Also RarSfx entpackt nach \xyz\ dein(e) archiv(e), auch eine "cleanup.bat", die .bat über RarSfx ausführen lassen, die .bat löscht alles was Du angibst, RarSfx löscht nach Abschluss die .bat. oder 2. Normales Archivformat (.zip/.7z/.rar/whatever) anbieten und User mitteilen das sie im Vorfeld den Verzeichniss Inhalt manuell löschen müssen. (ich bin kein "Nemp" user, von daher weiß ich nicht ob du Konfigurations Dateien erstellst oder andere arten von Dateien... eventuell für so etwas ein backup&restore tool mit anbieten, du solltest dich ja in deiner Verzeichnis Struktur gut auskennen und wissen was von dir kommt und was user selbst erstellt haben...) Wäre das eine Möglichkeit? |
AW: Programm-Update: Dateien löschen
Für die Version mit dem regulärem Setup hast du bereits eine Lösung. Es geht also nur noch um die zip-Variante.
Anwendern, die diese verwenden, kann man eine gewisse Verantwortung übertragen. Mache eine passende Readme-Datei und ein Batchprogramm. Dann können die Anwender selbst entscheiden, wann aufgeräumt wird. |
AW: Programm-Update: Dateien löschen
Zitat:
|
AW: Programm-Update: Dateien löschen
Zitat:
So ganz ohne Automatismus möchte ich das aber auch nicht machen. Neulich hatte ich z.B. den Fall, dass jemand das Zipfile (das auch eine Datei enthält, die dafür sorgt, dass Einstellungen im Programmverzeichnis gespeichert werden sollen) unter c:\Programme entpackt hat, was dann dazu führte, dass keine Einstellungen und Daten gespeichert werden. Man sollte also nie die Fähigkeiten der User unterschätzen, etwas Unerwartetes zu tun. ;-) Ich denke, ein Hinweis-Fenster beim ersten Start der neuen Version, das auf das Problem hinweist, ist ein guter Kompromiss zwischen "Kontrolle über die portable Version" und "Komfort". Wenn der User die Meldung wegklickt, bleibt der Hinweis ggf. an entsprechender Stelle im Einstellungsdialog erhalten, verbunden mit einem Button "Jetzt aufräumen", um das nachzuholen. Ich bin nebenbei gesagt positiv überrascht über die zahlreichen Antworten. Hätte nicht gedacht, dass es dazu so viele Meldungen gibt. :thumb: |
AW: Programm-Update: Dateien löschen
Du könntest die Dateien auch sichtbar versionieren.
Vlt noch eine Datei, "Version.txt" die nur die Info enthält welche Version gerade Mode ist. Für die, die keine ReadMe lesen wollen.
Code:
Da wirkt sich allerdings nur bei neuen Nutzern direkt aus. Bei Bestandsnutzern musst Du darauf vertrauen dass sie die ReadMe lesen.
Help.3_14.pdf
Help.3_15.pdf |
AW: Programm-Update: Dateien löschen
Der billige Weg, (einfache) User vom Entpacken irgendwelcher ZIPs abzuhalten, ist
nenn sie nicht ZIP :stupid: |
AW: Programm-Update: Dateien löschen
Sinn einer portablen Version ist aber doch eigentlich, dass der User selbst entscheidet, wo er die Software "hinhabenwill", also eben, die Software nicht zu installieren, sondern "manuell irgendwo unterzubringen". Dazu ist halt die ZIP da, wenn man eben nicht per Setup installieren möchte.
Da hilft dann das Umbenennen der ZIP auch nicht, um das Problem mit dem Entfernen obsolet gewordenen Dateien zu lösen. |
AW: Programm-Update: Dateien löschen
Generell würde ich Software IMMER als MSI verteilen.
Unabhängig davon, kannst du CreateFile auch Parameter mitgeben, welche eine Datei automatisch löschen, wenn alle Dateizeiger drauf geschlossen wurden. "FILE_FLAG_DELETE_ON_CLOSE" Also Ausführungsprogramm ins %temp% kopieren mit CreateFile(mit FILE_FLAG_DELETE_ON_CLOSE), dann Starten und dann ursprüngliches Programm beenden. |
AW: Programm-Update: Dateien löschen
Moin...8-)
Zitat:
|
AW: Programm-Update: Dateien löschen
Zitat:
Zitat:
Portable Versionen brauchen keine Admin Rechte und schreiben auch nichts einfach irgendwo ungefragt hin. Die Leben in ihrem Verzeichnis, zum Beispiel auf einem externen Datenträger. Und laufen auf jedem Rechner wo man sie haben will. Außerdem, es ist oft hilfreich wenn man einen Thread vom Anfang ließt. Es geht hier nicht ansatzweise Sinnfälligkeit / -losigkeit von Installern. Sondern nur um die Lösung des im ersten Post beschriebenen Problems! |
AW: Programm-Update: Dateien löschen
Na dann Entwickle doch ein kleines Tools was durch deine Verzeichnis-Struktur wandert, jede Datei in einer Liste aufnimmt und mit einer internen Liste abgleicht, alles was nicht reingehört zur jetzigen Version Liste auf (vielleicht mit einer CheckBox pro Eintrag) und habe einen "Entfernen" Button der ggf sich Admin-Rechte einholt um diese Dateien zu löschen. Innerhalb Nemp kannst Du das ja ggf. als Menu Punkt integrieren, sowas wie "Integritätscheck" o.ä....
Somit liegt es beim User, ob oder ob nicht... das sollte dann nicht mehr Deine Sorge sein. (und dein eigentliches Nemp braucht nicht stets und ständig nach irgendwas suchen...) |
AW: Programm-Update: Dateien löschen
Zitat:
Code:
[Setup]
Uninstallable=false |
AW: Programm-Update: Dateien löschen
Liste der Anhänge anzeigen (Anzahl: 1)
Um das Thema nicht so in der Luft hängen zu lassen: Nach einigem hin und her (und einer längeren Programmier-Pause) habe ich nun einen Dialog halbwegs fertig, der bei Bedarf beim ersten Start angezeigt wird und über das Problem informiert. Bei der Anzeige des Dialogs wird ein Ini-Eintrag "LastUpdateCleaningCheck" passend gesetzt, der dann als einziger bei den folgenden Programmstarts getestet wird, damit der Dialog nicht jedes Mal angezeigt wird.
Nach erfolgreichem Löschen aller Dateien und Verzeichnisse (bzw. wenn keine da sind) wird zusätzlich ein Eintrag "LastUpdateCleaningSuccess" gesetzt. Über diesen wird gesteuert, ob im Menü ein Eintrag zum Aufräumen des letzten Updates angezeigt wird oder nicht. Das sollte so passen. Falls das automatische löschen nicht klappt, soll der User in die Hilfe gucken. Da steht dann u.a. was von Admin-Rechten und nicht-leeren Verzeichnissen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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