Macht es Sinn alte DLL Dateien die einem Programm beiliegen upzudaten und durch neue zu ersetzen?
-
Immerhin enthalten alte DLL Bibliotheken ja auch Fehler und Sicherheitslücken,
da wäre es ja dann durchaus sinnvoll, wenn man sie durch eine neue Version auswechselt.Aber funktioniert das dann auch immer oder führt das zu Problemen?
-
Bei Windows selbst, ist ja dafür das Windows-Update-System zuständig. Wo Microsoft entscheidet, was es für Updates gibt und welche Merkmale die bekommen.
Bei Programmen für Windows, sind die DLLs meist hauseigene. Sollte man da also im Internet angeblich aktuellere finden, kann das ebenso auch ein Fake mit Schadsoftware sein! Richtiger ist, auf das Update-System der Firma zu vertrauen bzw. der Angaben der offiziellen Website der Firma. Da sieht man dann ja wenn, die downloadbare Version neuer ist, als die installierte.
Wenn man dann eine neuere Version installiert, werden eh neue Dateien installiert. Also da selber DDLs auszutauschen macht wenig Sinn. Zumal es auch sein könnte, dass dann die Parameter für eine neuere DDLs anders lauten müssten oder das Ergebnis anders zurückkommt, also anders behandelt werden müsste. Somit wäre dann ein Crash garantiert. Oder ein Prüffunktion meldet schon beim Programmstart, dass Dateien fehlen.
-
Computer schrieb:
Bei Programmen für Windows, sind die DLLs meist hauseigene. Sollte man da also im Internet angeblich aktuellere finden, kann das ebenso auch ein Fake mit Schadsoftware sein! Richtiger ist, auf das Update-System der Firma zu vertrauen bzw. der Angaben der offiziellen Website der Firma. Da sieht man dann ja wenn, die downloadbare Version neuer ist, als die installierte.
Wenn man dann eine neuere Version installiert, werden eh neue Dateien installiert. Also da selber DDLs auszutauschen macht wenig Sinn. Zumal es auch sein könnte, dass dann die Parameter für eine neuere DDLs anders lauten müssten oder das Ergebnis anders zurückkommt, also anders behandelt werden müsste. Somit wäre dann ein Crash garantiert. Oder ein Prüffunktion meldet schon beim Programmstart, dass Dateien fehlen.
[/QUOTE]
Okay, aber mal angenommen die Firma macht keinen guten Support oder liefert keine Patches mehr aus, aber die Executable des Programms verwendet DLL Bibliotheken die frei verfügbar sind, wie z.B. die MS Visual Studio C++ Runtime (msvcp71.dll) oder die zlib (zlib.dll).
In diesem Fall hätte man dann ja die Möglichkeit neuere Versionen der DLL Dateien aus vertrauenswürdiger Quelle zu erhalten oder (im Falle von zlib) selbst zu compilieren).
Kann man dann die DLL Datei gefahrlos austauschen, insbesondere wenn man darauf achtet die richtige Majorversion zu verwenden* oder kann es dann ebenfalls zu einem Crash führen?
* Bei LGPL Libs ist es ja oft üblich, dass nur die Majorversion Änderungen enthält, während die Minorversionen nur Bugfixes enthalten.
-
Das geht idR nicht gefahrlos. Die Anwendung muss ja wissen, wo in der DLL die Einsprungspunkte sind, und die können sich von Version zu Version durchaus ändern, gerade wenn der Entwickler nicht darauf achtet, die Kompatibilität zu vorherigen Versionen zu erhalten
-
So lange die neue Version alle Funktionen exportiert, welche von der Anwendung genutzt werden (und auch deren Parameter und Rückgabewerte sich nicht bzw. in kompatibler Weise geändert haben), gibt es da keine Probleme.
Die Adressen der Einsprungpunkte können sich problemlos ändern, da DLLs über eine Export-Tabelle verfügen, in welcher ein Funktionsname in eine Adresse aufgelöst werden kann, sobald die DLL geladen wird.
Dabei ist zu beachten, dass speziell bei C++ und in Verbindung mit dem unter Windows üblichen __stdcall verschiedene Formen des Name-Mangling auftreten, d.h. die Funktion "void foo(int, char);" muss in der Tabelle nicht unbedingt "foo" heißen.
(Darum kümmern sich aber Compiler und Linker. So lange die Funktion da ist und die gleichen Parameter erwartet, verändert sich der Name nicht.)Innerhalb einer Major-Version bleiben Bibliotheken in der Regel kompatibel, wobei das natürlich nicht 100%-ig sicher ist. Im Ernstfall gilt:
Backup der alten DLL anfertigen, neue DLL installieren, Anwendung testen und sehen, ob alles klappt.
Unter Umständen können diverse Inkompatibilitäten auch erst später auftreten, da sie mit einer Programmfunktion zusammenhängen, die selten verwendet wird.
Zur Sicherheit sollte man daher das Backup auch behalten, wenn die Anwendung zu laufen scheint.Für die MSVCRT gilt auch das Prinzip mit der Major-Version.
Es ist also keine gute Idee, die msvcp71.dll durch die msvcp90.dll zu ersetzen. Das führt höchstwahrscheinlich zu Problemen.
-
Vielen Dank für eure Antworten.
Besonders deine, DrakoXP ist eine super Antwort und sehr ausführlich, danke nochmal.Dann werde ich das mal so testweise machen und von der alten DLL ein Backup anlegen.
-
Was ist jetzt überhaupt dein Anwendungsfall und worums gehts dir konkret? Wenn du kein konkretes Problem hast, dann lass es bleiben und spar dir die Mühe
Ich denke, es würde höchstens mal in paar Sonderfällen funktionieren, die Dll auszutauschen. Es mag dann vielleicht sogar auf den ersten Blick funktionieren, aber dann kann es vielleicht trotzdem irgendwelche Probleme geben, die erst später auffallen.