PDA

View Full Version : [OT] Programmierung einer Deinstallationsroutine?



Sargas
25-09-03, 11:18
Bei einer Unterhaltung letztens kamen wir auf das Thema Programmierung und unsaubere Deinstalltionen.
Da hab ich mich gefragt, warum es Programme gibt, die es nicht schaffen, sich vollständig zu deinstallieren, ohne Reste zu hinterlassen. Ich meine, sie müssten doch selber am besten wissen, wo sie was hinschreiben, oder?
Ich selber habe keine Ahnung von Programmierung, und deshalb richte ich meine Frage mal an die ganzen Programmierer und Informatiker da draussen. Andere dürfen natürlichauch antworten :D

Tkon
25-09-03, 11:30
Originally posted by Sargas
Bei einer Unterhaltung letztens kamen wir auf das Thema Programmierung und unsaubere Deinstalltionen.
Da hab ich mich gefragt, warum es Programme gibt, die es nicht schaffen, sich vollständig zu deinstallieren, ohne Reste zu hinterlassen.
Ich meine, sie müssten doch selber am besten wissen, wo sie was hinschreiben, oder?
Ich selber habe keine Ahnung von Programmierung, und deshalb richte ich meine Frage mal an die ganzen Programmierer und Informatiker da draussen. Andere dürfen natürlichauch antworten :D
Was meinste denn mit unsauberer Deinstallation?
Oft hinterlassen die Programme selber auch keine Reste.
Manchmal ist es absicht (Kompfort) Bsp. speichern von Einstellungen in der Registry die bei deinstallation vorhanden bleiben, damit man bei neuinstallation den Kram net wieder eingeben muss.
Manchmal ruft ein Programm aber z.B. nur eine Methode aus einem Control z.B. und diese merkt sich dann irgendwo noch was.

hajoan
25-09-03, 12:16
Eine Saubere Installation setzt eigendlich immer eine evtl. Deinstallation der vorhergehenden Version voraus.
Nun soll der Anwender nicht alle Einstellungen wieder vornehmen müssen. Also werden die gespeichert.
Qick & Dirty: Im Programmverzeichnis
Andere Möglichkeiten: In der Registry oder im Systemverzeichnis.
Nicht nur die Einstellungen, auch ein Produktkey könnte da (verschlüsselt?) abgelegt werden.

Dies ist aber das wenigste, oder?

Ein anderes Problem sind die mitgelieferten DLLs.

Wenn ein Programm diese zur Sicherheit mitliefert (dlls sind Bibliotheken mit Einsprungadressen für gewisse Unterprogramme / Funktionen, welche immer wieder genutzt werden), dann gibt es ein Problem.
Speichere ich sie um sie auch anderen Programmen verfügbar zu machen im zugehörigen Systemverzeichnis, dann überschreibe ich eine andere Version evtl.
Bei der deinstallation darf ich diese also gar nicht mehr löschen.
Es hilft auch nichts, die alte Version zu sichern und bei der deinstallation wiede herzustellen. Andere Programme könnten ja inzwischen die neuere Version voraussetzen.
Saubere Methode hier: dll ins Programmverzeichnis.

Aber: Mehr Platzbedarf (dlls redundant) und ausserdem sind die Tools von m$ (und auch die Vorgaben von denen) so ausgelegt, das alles zentralisiert wird.
Daher auch damals die Einführung der Registry.
Vorher hatte jedes Programm einfach seine .ini und gut war.

Gut, das ist jetzt keine volle Erklärung.
Soll nur ein Ansatz sein.
Und Registry/inis und dlls sind immer das Hauptproblem beim löschen von Programmen.

Tkon
25-09-03, 12:41
Jo mit .NET wirds dann auch endlich möglich sein versch. Versionen einer *.dll (sind ja keine richtigen *.dlls mehr) zu haben.

hajoan
25-09-03, 13:35
hehe... auch vom Beruf Programmierer?

DartVader
25-09-03, 15:02
Programmierer gibt es hier ja anscheinend einige... :)

<--


zur Frage: Es gibt auch einige Installationsprogramme die merken sich für jede Datei die installiert wird eine Checksumme - beim Deinstallieren werden nur die Dateien entfernt die der Checksumme entsprechen damit Dateien die der Benutzer geändert hat erhalten bleiben.
(Dummerweise merken dann wieder einige nicht das in der Zwischenzeit ein Softwareupdate diese Dateien ersetzt/gepatch hat -> schon bleibt müll über...)

Würde mich auch wundern wenn bei der Deinstallation von Neocron die Dateien aus /Patches mit gelöscht würden ...
Schliesslich sind diese nie installiert worden, und wenn sie erhalten bleiben erleichtert das eine Neuinstallation. (habe es nicht ausprobiert - bei mir läuft Neocron seit erstinstallation ohne Probleme ...)

Tkon
25-09-03, 15:17
Originally posted by hajoan
hehe... auch vom Beruf Programmierer?
joa :D

Deep Blue Six
25-09-03, 16:21
Ich frag mich wann Invi den Thread sieht und uns ale mit seiner Weissheit segnen wird :lol:

redCube
25-09-03, 16:29
Einfachste Erklärungen wieso so viele Programme "unsauber deinstalliert" werden:

1. Den Installer schreibt meistens jemand, der nicht das Hauptprogramm geschrieben hat; derjenige muss sich also auf die Angaben der Programmierer verlassen

2. Programme werden aktualiesiert - die Deinstallationsprogramme nie (Gegendarstellung?); kommt durch einen Patch ne neue Datei dazu, weiss das Deinstallationsprogramm meistens nix davon => wird belassen

3. Einige Dateien - insbesondere DLLs - werden von mehreren Programmen verwendet; es gibt keine wirklich sichere Methode um zu sagen, ob eine DLL noch gebraucht wird oder nicht. (Deswegen landen bei vielen Progs die DLLs auch nicht mehr im Systemverzeichnis, sondern einfach im Programmverzeichnis)

Invhunter
25-09-03, 16:59
Originally posted by Deep Blue Six
Ich frag mich wann Invi den Thread sieht und uns ale mit seiner Weissheit segnen wird :lol:

Segne.... :)

Deep Blue Six
25-09-03, 17:03
Segen auffängt und weckrennt mit hocherhobenem Schild auf dem steht "ICH WURDE ERLEUCHTET" ;) :D :lol:

Invhunter
25-09-03, 17:20
Wo schon mal nach meinem Senf verlangt wird, will ich euch auch nicht davon verschonen. :)

Eigentlich ist es recht einfach eine sauber Deinstallations-Routine zu schreiben, wenn man einfach an einer festen vorgehensweise festhält.
Wer sich intensiver mit Programmierung beschäftigt sollte wissen, dass DLLs nicht einfach so überschrieben werden dürfen.
DLLs die in einem System-Verzeichniss enden sind meistens Dateien die COM-Objekte beinhalten.
COM = Component Object Modelling
Das bedeutet, dass eine Datei Module für unterschiedliche Programme bereit hält. Gemäß den COM-Richtlinien muss aber eine Datei die COM-Module enthält in einer neueren Version immer auch die Funktionen der vorhergehenden Version beinhalten.
Paradebeispiel dafür ist DirectX. Neuere Versionen von DirectX beinhalten immer auch die Funktionen der älteren Versionen. Deswegen wird die Redist-Version von DirectX auch immer größer.
Um Probleme mit dem überschreiben zu vermeiden, wenn man schon unbeding was in das System-Verzeichniss schreiben muss, reicht es einfache Regeln zu verfolgen.
Die Suchreihenfolge bei DLLs ist im System immer gleich:

Lokales Verzeichniss des aufrufenden Programms

Root-Verzeichniss

System-Verzeichniss und Subfolder

System32-Verzeichniss und Subfolder

Nun schreibt man in die System-Verzeichnisse höchstens Dateien die öffentlich zum System erhältlich sind, Teile einer Runtime darstellen oder man schreibt sie in ein Unterverzeichniss das man selbst anlegt.
Ich persönlich tendiere eh dazu alles was für meine Programme benötigt wird im lokalen Verzeichniss zu halten um Probleme zu vermeiden.
Des weiteren sollte der Installer eine eigene Log-Datei schreiben in der sämtliche Informationen über geschriebene Files und Registry-Einträge abgelegt werden, so dass der Uninstaller sie nachher auch eindeutig findet.
Ein Autopatcher oder ähnliches muss dann beim patchen eigentlich nur die Datei öffnen und die Änderungen für den Uninstaller rein schreiben.
Orientiert sich der Uninstaller dann immer an dieser Datei kann eigentlich nichts schief gehen vorausgesetzt die Datei wird nicht gelöscht. Dann hat man halt Pech gehabt.

Aber wenn man selbst noch so drauf achtet ist man nicht gefeit vor dem Wahnsinn mancher anderer.

Ich erlaube meinen Programmen nur bestimmte Einträge in die Registrierung zu schreiben, die auch auf alle Fälle IMMER geschrieben werden und so dann auch gelöscht werden können.
Die Einträge mache ich nicht unter einem lesbaren Schlüssel sondern unter der GUID des Programmes, so dass es unwahrscheinlich ist, dass die ein anderes Programm überschreiben würde.
Dateien lege ich im lokalen Verzeichniss ab und das wars eigentlich auch schon. So wird alles sauber installiert, man kann es sauber deinstallieren und selbst wenn ein Bockmist mal läuft, weiss man immer, was man ungefährdet löschen darf.

TheRipper
25-09-03, 18:59
Bin ich froh dass das programmieren andere für mich übernehmen....microsoft usw :D

DartVader
26-09-03, 00:20
Originally posted by TheRipper
microsoft :D

Also da bin ich nicht immer so froh drüber :rolleyes:

TheRipper
26-09-03, 09:02
Ja gut, aber Linux ist FÜR MICH keine Alternative und ich bin nunmal froh nicht selbst ein "Betriebssystem" programmieren zu müssen :lol:

ob MS nun gut ist oder nicht, steht ausser frage...die antworte wäre nicht :D

Tkon
26-09-03, 09:08
Originally posted by TheRipper
Ja gut, aber Linux ist FÜR MICH keine Alternative und ich bin nunmal froh nicht selbst ein "Betriebssystem" programmieren zu müssen :lol:

ob MS nun gut ist oder nicht, steht ausser frage...die antworte wäre nicht :D
Die Frage muss anders gestellt werden. :)
Die Frage ist was ist für eine bestimmte Anforderung das beste Betriebssystem.

Und da gehört auf einen Server ein Linux oder besser ein richtiges Unix, da Linux nur der Kernel mit nem Haufen Progamme ist. Die BSD's hingegen sind richtige Betriebssysteme.

Windows gehört auf den Desktop, Linux hat zwar einiges nachgeholt, aber in dem Moment wo Linux den Verbreitungsgrad von Windows erreicht wird es auch die gleichen Probleme wie Windows bekommen.
*User die keine Patches einspielen.
*User die immer mit allen Rechten arbeiten
*User die wild auf alles drauflos klicken (besonders gefährlich in Verbindung mit dem vorhergehenden Punkt)
*Ausserdem wachsen mit der komplexität der Programme autom. die Fehler die dort von den Entwicklern unbeabsichtigt eingebaut werden.

Ich denke jedes OS hat seine Berechtigung. Und ohne Grund ist Windows nicht so verbreitet.

Invhunter
26-09-03, 09:15
Ahhhh! Endlich einer der meiner Meinung ist! :)
Aber das zu Windows und Linux habe ich schon mehrfach in anderen Threads geschrieben und möchte ich hier nicht noch einmal wiederholen.

TheRipper
26-09-03, 09:23
Ist schon klar dass alles seine vor- und nachteile hat, darauf basiert das meiste in der Welt.
Und ich stimme zu, dass das ideale betriebssystem immer das ist, das dem verwendungszweck am meisten dient.

Linux für User die sich einen Dreck auskennen, wäre zB auch nicht zu empfehlen.

Deep Blue Six
26-09-03, 17:31
Halten wir doch mal fest, dass es immer leicht is über was zu nörgeln was man selbst nie so hinkriegen würde.

Als Sys Admin hör ich bei uns in der Firma immer die Sprüche, scheiss NT. Die haben ja voll keine Ahnung bei MS.

Ich möcht mal die Leute sehen die en besseres Windows bauen würden, (unabhängig davon dass ich auch nur 2 Windows Produkte gut finde) denn Leute die Ahnung davon haben reden nicht von nem Scheiss System sondern weisen auf andere Lösungen hin und erkennen gleichzeitig aber auch die Arbeit hinter dem Produkt an.


Greetz

Kodama

rykerr
26-09-03, 20:23
hihi ich finds immer lustig wenn irgendwer schreit "SCHEISS WINDOWS!!!!1111 ICH INSTALLIER MIR JETZT LINUX!!111111"
tjo.. fragt man dann 2 tage spaeter "und, wie laeuft deine box?" kommt meistens "aeh ich muss weg" :>

TheRipper
27-09-03, 17:02
Also die arbeit von MS werde ich nicht anerkennen, schließlich verdient der konzern auch genug und die progammierer selbst kenn ich nicht...:rolleyes: