Installer: Ungenutzte Dateien löschen?
-
Hallo!
Ich möchte gerne einen eigenen Installer für mein simples Programm erstellen.
Es soll zukünftig auch Updates geben (per Updater oder Installer).Nun überlege ich schon die ganze Zeit, wie man am besten veraltete Dateien handhabt.
Also zB. installiert v1.0 eine Datei test.dat, die in v1.1 nicht mehr benötigt wird.- Einfach drin lassen (im Programmordner) finde ich unschön, da könnte sich mit der Zeit einiges anhäufen.
- Bei einem Update alle Dateien im Programmordner löschen, die nicht zur aktuellen Version gehören finde ich auch unschön. Der Benutzer könnte ja (wichtige) Daten dort speichern, die wären dann weg (Klar, normalerweise macht man das nicht, aber "normal" und "Benutzer" passt eh nicht zusammen).
- Eine weitere Möglichkeit wäre, eine Löschliste (im Updater/Installer integriert) zu führen. v1.1 wüsste dann, dass test.dat nicht mehr benötigt wird. v1.2 und alle künftigen Versionen müssten diesen Eintrag (und evtl. weitere) aber auch führen, denn es soll auch v1.0 -> v1.2 usw. möglich sein.
Das größte Problem sehe ich dabei, dass der Benutzer nach v1.1 die test.dat nicht mehr sieht, und eine eigene anlegt (mit evtl. wichtigen Daten). Dann installiert er v1.2 und seine test.dat wird gelöscht...Man könnte noch eine Datei/Registry führen, die die letzte installierte Version oder ganze Installations-Logs enthält (Dann wüsste zB. v1.2, dass v1.1 nie installiert wurde, und die test.dat deshalb zur Installation gehört, und nicht von v1.1 gelöscht und nachher vom Benutzer erstellt wurde).
Doch das ist mir zu fragil (Benutzer löscht was..).Ich weiß, ich bin bestimmt übervorsichtig, und ich kann mir auch nicht so richtig vorstellen, dass ein Benutzer sensible Daten im Installationsordner speichert, und diese auch noch nach ehemaligen Programmdateien benennt...
Mache ich mir da zu viele Sorgen?
Wie geht man da am besten vor?Danke!
-
gelöscht, war zu teuer auf windows.
-
Ich glaub ich würde glaube ich im Installer eine Liste mitführen welche Dateien in alten Versionen existiert haben und welche jetzt gebraucht werden. Dann alle die nicht gebraucht werden löschen. Und wenn jemand alte Dateien wieder herstellt dann ist das sein Problem wenn die gelöscht werden.
Alternativ kannst du ja auch alle Dateien in ein Archiv packen, und wenns nur eine zip Datei ist die data.dat heißt. Dann kannst du alle Operationen auf dem Archiv ausführen, und wenn jemand die Datei absichtlich ändert muss er damit rechnen dass dein Programm sich anders verhält als geplant, d.h. dass die Daten eventuell verloren gehen.
-
Buddi schrieb:
- Einfach drin lassen (im Programmordner) finde ich unschön, da könnte sich mit der Zeit einiges anhäufen.
Bin zwar deiner Meinung -> ist unschön.
Aber vielleicht will jemand zur vorherigen Version zurückkehren und du löschst ihm dann die Dateien. Das ist auch nicht schön. Du solltest einen Weg bereitstellen, bei dem er sich die Version bei Bedarf auswählen kann.- Bei einem Update alle Dateien im Programmordner löschen, die nicht zur aktuellen Version gehören finde ich auch unschön. Der Benutzer könnte ja (wichtige) Daten dort speichern, die wären dann weg (Klar, normalerweise macht man das nicht, aber "normal" und "Benutzer" passt eh nicht zusammen
).
So etwas stümperhaftes macht man niemals. NIE.
Wenn du löschst, dann nur so, dass du explizit die zu löschenden Dateien benennst. Denn wie du richtig erkannt hast, könnte der Benutzer da ja seine eigenen Dateien ablegen.
Deswegen löscht man nie einen kompletten Ordner oder alles im Ordner.Beachte aber, wenn du die SW patchen tust, dass der uninstaller auch über neue Dateien Bescheid weiß und auch diese löschst.
Ich bin in der Vergangenheit immer wieder auf Uninstaller gestoßen, die einen eingespielten Patch nicht bemerken und dann Dateileichen im Ordner drin lassen.
Natürlich könntest du dem Nutzer optional anbieten, beim Uninstallen den Ordner per Force zu löschen.
Dies sollte der Nutzer dann aber explizit anklicken müssen, wo er dann auch darauf hingewiesen wird, dass nun der gesamte Programmordner mit allen Dateien, auch fremden gelöscht wird.- Eine weitere Möglichkeit wäre, eine Löschliste (im Updater/Installer integriert) zu führen. v1.1 wüsste dann, dass test.dat nicht mehr benötigt wird. v1.2 und alle künftigen Versionen müssten diesen Eintrag (und evtl. weitere) aber auch führen, denn es soll auch v1.0 -> v1.2 usw. möglich sein.
Ja, so solltest du es machen.
Das alle Versionen aufgenommen werden müssen, darüber würde ich mir keine Sorgen machen, denn so groß kann so eine Datei auch nicht werden, dass sie stört.Das größte Problem sehe ich dabei, dass der Benutzer nach v1.1 die test.dat nicht mehr sieht, und eine eigene anlegt (mit evtl. wichtigen Daten). Dann installiert er v1.2 und seine test.dat wird gelöscht...
test.dat sollte natürlich keine Daten enthalten, mit denen der Benutzer arbeitet.
Wenn du also z.b. Dokumentenvorlagen und Beispieldateien für dein Programm mitliefern willst, dann gehören die in den Ordner des Benutzers (z.b. Eigene Dateien) und nicht in den Programmordner.Und für den Benutzerordner gilt, der wird beim Uninstallen oder updaten nie angerührt.
Dein Programm sollte als Speicherorte auch immer gleich auf Eigene Dateien oder so verweisen, niemals in den Programmordner, denn faule Nutzer speichern dann dort.
Und da gehört es allein schon wegen der Nutzer/Admintrennung nicht hin.
Im Programmordner sollte nur der Admin Schreibrechte haben.Falls dein Updater Programm da reinschreiben können soll, musst du es als Serverdienst laufen lassen.
Man könnte noch eine Datei/Registry führen, die die letzte installierte Version oder ganze Installations-Logs enthält (Dann wüsste zB. v1.2, dass v1.1 nie installiert wurde, und die test.dat deshalb zur Installation gehört, und nicht von v1.1 gelöscht und nachher vom Benutzer erstellt wurde).
Doch das ist mir zu fragil (Benutzer löscht was..).Du kannst doch ne version.xml Datei in deinen Programmordner reinschreiben, in der dann die Version gespeichert wird.
Dann weiß der Installer immer, welche Version gerade installiert ist.Oder, noch besser. Du benutzt md5 Prüfsummen.
Damit kannst du alle Dateien nicht nur auf Veränderung checken, sondern weißt mit Gewissheit, welche Version die aktuelle *.exe gerade ist.Falls die Nutzer aber dein Programm modden können sollen, dann solltest du natürlich entsprechende overwirte Modi anbieten, damit die Prüfsummen nicht im Weg stehen und z.b. ein Update verhindern.
Ich weiß, ich bin bestimmt übervorsichtig, und ich kann mir auch nicht so richtig vorstellen, dass ein Benutzer sensible Daten im Installationsordner speichert, und diese auch noch nach ehemaligen Programmdateien benennt...
Ich finde es gut, dass du dir darüber überhaupt Gedanken machst.
Es gibt Programmierer, die die machen das wie Kraut und Rüben.
Schweren sich nen Dreck um die Admin/Nutzertrennung, packen alles in den Programmordner.
Lassen Patches drüberbügeln, ohne das der Uninstaller die Änderungen mitbekommt usw.
-
Auskenner schrieb:
Aber vielleicht will jemand zur vorherigen Version zurückkehren und du löschst ihm dann die Dateien. Das ist auch nicht schön. Du solltest einen Weg bereitstellen, bei dem er sich die Version bei Bedarf auswählen kann.
Nein, ein Downgrade soll nicht möglich sein. Es ist ein Programm, welches hauptsächlich über's Netzwerk (mit einem Master) funktioniert und muss somit eh immer am neuesten Stand sein.
Auskenner schrieb:
So etwas stümperhaftes macht man niemals. NIE.
Wenn du löschst, dann nur so, dass du explizit die zu löschenden Dateien benennst. Denn wie du richtig erkannt hast, könnte der Benutzer da ja seine eigenen Dateien ablegen.
Deswegen löscht man nie einen kompletten Ordner oder alles im Ordner.Hatte ich auch absolut nicht vor
Auskenner schrieb:
Beachte aber, wenn du die SW patchen tust, dass der uninstaller auch über neue Dateien Bescheid weiß und auch diese löschst.
Ja, der Uninstaller soll pro Version aktualisiert werden und die aktuelle Dateiliste halten.
Auskenner schrieb:
Ich bin in der Vergangenheit immer wieder auf Uninstaller gestoßen, die einen eingespielten Patch nicht bemerken und dann Dateileichen im Ordner drin lassen.
Ja, das kenn ich und mag ich auch nicht. Oft sind es aber Logs..
Auskenner schrieb:
Natürlich könntest du dem Nutzer optional anbieten, beim Uninstallen den Ordner per Force zu löschen.
Dies sollte der Nutzer dann aber explizit anklicken müssen, wo er dann auch darauf hingewiesen wird, dass nun der gesamte Programmordner mit allen Dateien, auch fremden gelöscht wird.Daran hab ich auch schon gedacht. Bin aber eher in der Benutzer==DAU Einstellung.
Auskenner schrieb:
Ja, so solltest du es machen.
Das alle Versionen aufgenommen werden müssen, darüber würde ich mir keine Sorgen machen, denn so groß kann so eine Datei auch nicht werden, dass sie stört.Jo, ich werd's wohl über ne "Löschliste" realisieren. Wird wahrscheinlich eh eher selten passieren, dass eine Datei nicht mehr benötigt wird.
Auskenner schrieb:
test.dat sollte natürlich keine Daten enthalten, mit denen der Benutzer arbeitet.
Wenn du also z.b. Dokumentenvorlagen und Beispieldateien für dein Programm mitliefern willst, dann gehören die in den Ordner des Benutzers (z.b. Eigene Dateien) und nicht in den Programmordner.Sowieso nicht. Ich meinte eigentlich, dass der Benutzer selbst Dateien in den Programmordner legt, die den selben Namen haben wie (ehemalige) Programmdateien. Könnte ja auch mal unabsichtlich passieren, bei gebräuchlichen Bezeichnungen..
Auskenner schrieb:
Falls dein Updater Programm da reinschreiben können soll, musst du es als Serverdienst laufen lassen.
Oder als elevated process...
Auskenner schrieb:
Du kannst doch ne version.xml Datei in deinen Programmordner reinschreiben, in der dann die Version gespeichert wird.
Dann weiß der Installer immer, welche Version gerade installiert ist.Oder, noch besser. Du benutzt md5 Prüfsummen.
Damit kannst du alle Dateien nicht nur auf Veränderung checken, sondern weißt mit Gewissheit, welche Version die aktuelle *.exe gerade ist.Falls die Nutzer aber dein Programm modden können sollen, dann solltest du natürlich entsprechende overwirte Modi anbieten, damit die Prüfsummen nicht im Weg stehen und z.b. ein Update verhindern.
Ja, ich glaube ich führe crc32 Listen, damit ich erkennen kann, ob jemand ein Downgrade machen will :3
-
Buddi schrieb:
Auskenner schrieb:
test.dat sollte natürlich keine Daten enthalten, mit denen der Benutzer arbeitet.
Wenn du also z.b. Dokumentenvorlagen und Beispieldateien für dein Programm mitliefern willst, dann gehören die in den Ordner des Benutzers (z.b. Eigene Dateien) und nicht in den Programmordner.Sowieso nicht. Ich meinte eigentlich, dass der Benutzer selbst Dateien in den Programmordner legt, die den selben Namen haben wie (ehemalige) Programmdateien. Könnte ja auch mal unabsichtlich passieren, bei gebräuchlichen Bezeichnungen..
Du könntest natürlich Bezeichnern von Programmdateien blacklisten, so dass ein Abspeichern unter diesen Namen in deinem Programm erst gar nicht möglich ist.