dll ersetzen, ohne im Win-Ordner rumzufummeln - geht nicht..?



  • Hallo,
    Ich habe hier ein älteres Programm, dass die msvcr90.dll benötigt, aber mit der aktuellen Version, aus dem Win-Ordner, Probleme hat und abstürzt.
    Jetzt dachte ich mir, kompiere ich doch einfach eine andere direkt ins Verzeichnis der Anwendung.. Hat aber nichts gebracht - der Error-Log zeigt immer noch an, dass es sich um die Version aus dem Win-Ordner handelt (habe auch testweise eine ganz andere dll umbenannt und es damit versucht).

    Was ich mich jetzt frage:
    1. Ich dachte immer, es sei quasi Vorgabe, dass erst im Anwendungsverzeichnis und dann im Systemordner nach dlls gesucht wird. Stimmt das garnicht?

    2. Und was kann ich machen, damit es funktioniert, ohne gleich das komplette System downzugraden?! Hexeditor-Hexereien??



  • Ich kann dir zwar keine Antwort auf deine Frage geben, aber vielleicht findest du hier was: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682586(v=vs.85).aspx.



  • Der verlinkte Artikel sagt:

    If a DLL with the same module name is already loaded in memory, the system uses the loaded DLL, no matter which directory it is in.

    Hast du mal versucht "Redistribution Pack Visual C++ 2008" zu installieren?

    Ob Lösung Name umbenennen mit einem Hexeditor funktioniert wäre interessant.

    Bei welcher Funktion aus der DLL tritt das Problem denn auf; oder schlägt schon das Laden fehl?



  • Die 2008er DLLs werden nicht über den klassischen Mechanismus geladen (lokales Verzeichnis, Suchpfad und so), sondern aus dem "Windows Component Store" (WinSxS Verzeichnis) genommen. Zu diesem Zweck enthält die EXE ein entsprechendes "Manifest", damit der PE Loader eben weiss dass es sich da um eine DLL handelt die aus dem Component Store kommt, welche Version benötigt wird etc.
    Die DLL einfach neben die EXE zu legen ist daher nicht ausreichend.
    (Lustigerweise nichtmal dann wenn es die DLL im Component Store nicht gibt!)

    Möglicherweise kann man da aber über ein .manifest File 'was machen, kannst ja mal zu dem Thema googeln.

    ps: Hier zwei Artikel zu dem Thema (Google "manifest file redirect to private msvcr90.dll version"):

    https://helgeklein.com/blog/2010/03/deploying-visual-c-runtime-files-as-private-assemblies/
    http://stackoverflow.com/questions/3097592/how-do-i-force-a-native-application-to-use-an-older-c-runtime


Anmelden zum Antworten