tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
1094
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Frogger Frogger ist offline Rookie
    Registriert seit
    May 2005
    Beiträge
    8
    Hallo

    Ich suche nach einer Möglichkeit, aus einem Programm heraus zu testen, ob die CRuntime Dlls, die MFC Dlls und MSXML4 DLLs auf einem Zielsystem installiert sind oder nicht. Der Hintergrund dazu ist folgender:
    Ich habe eine Visual C++ 8.0 Anwendung bei der ich dynamisch gegen die Laufzeitbibliotheken (CRT) und die MFC linke. Statisches Linken ist nicht möglich, da die Anwendung MFC Extensions verwendet, siehe dazu

    http://msdn.microsoft.com/en-us/libr...28(VS.80).aspx

    Ausserdem verwendet diese Anwendung MSXML4. Die betreffenden Bibliothekten die auf dem Zielsystem benötigt werden sind also die Folgenden:

    Laufzeitbibliotheken (CRT): msvcm80.dll, msvcp80.dll, msvcr80.dll
    Mfc Dlls: mfc80.dll, mfc80u.dll, mfcm80.dll, mfcm80u.dll
    MSXML4 Dlls: msxml4.dll, msxml4r.dll


    Mir ist das Problem bekannt, dass es nicht ausreicht diese DLLs auf das Zielsystem in den System32 Ordner oder den Ordner der Anwendung zu kopieren, da Visual Studio 2008 die Shared Side By Side Verwendung für CRT und MFC Dlls vorsieht (installation in WinSxS Ordner), und da MSXML4 ebenfalls in Windows registriert werden sollte. Mir ist auch bekannt dass es Tricks gibt diese Anforderungen durch Manipulationen am Manifest der Anwendung zu umgehen. Siehe hierzu:

    http://mcblogs.craalse.de/sku?title=...&c=1&tb=1&pb=1

    http://codehq.net/cs/blogs/john/arch...r-account.aspx

    Allerdings sehe ich bei den Lösungen die auf die Manipulation der Manifeste hinauslaufen bestimmte Einschränkungen und mögliche zukünftige Probleme.
    Ich würde lieber dafür sorgen dass auf dem Zielsystem vor der Ausführung der C++ Anwendung ein anderes Programm gestartet wird, das zunächst testet ob MSXML4 und die benötigten Bibliotheken für MFC und und CRT installiert sind, um im Fall einer fehlenden Bibliothek den Benutzer aufzufordern diese zu installieren. (Insbesondere will ich die Standardfehlermeldung vermeiden.)
    Ich habe zwar ein paar Hinweise gefunden, aber noch keinen Ansatz der mich so richtig überzeugt.

    z.B. Der Versuch, eine DLL zu Laden welche die CRT verwendet wie bei ...

    http://www.codeproject.com/KB/cpp/vc...rivateAssembly

    um beim fehlgeschlagenen Laden festzustellen dass CRT nicht verfügbar ist, ist keine schöne Lösung. Außerdem kenne ich noch folgende Links die mit dem Thema zu tun haben:


    http://forums.winamp.com/printthread...487&perpage=19

    http://nsis.sourceforge.net/WinSxS_Q...y_is_installed

    http://blogs.msdn.com/astebner/archi...e-package.aspx

    http://blogs.msdn.com/astebner/archi...-packages.aspx

    http://social.technet.microsoft.com/...8-a865a7111d20


    Was soweit hängengeblieben ist: anhand der Registry zu ermitteln scheint nicht der richtige Weg zu sein, und auch jede sonstige vorgeschlagene Lösung scheint einen Haken zu haben.

    Weiß jemand eine einfache, unproblematische Lösung zu diesem Problem ?

    Für Lösungsvorschläge bedanke ich mich im Voraus.

    Viele Grüße
    Frogger
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Würde ein simples LoadLibrary nicht genügen? Das geht dann natürlich nicht auf die Versionsnummern ein, aber rein zum Feststellen, ob die DLL da ist.
     

  3. #3
    Frogger Frogger ist offline Rookie
    Registriert seit
    May 2005
    Beiträge
    8
    Das wäre die Lösungsvariante, die in dem oben verlinkten Artikel bei Codeproject vorgeschlagen wird, und dort auch im Programmbeispiel enthalten ist. Das Problem dabei ist schonmal dass ich mit Dummy DLLs arbeiten müsste (Eine DLL um zu testen ob CRT fehlt, eine um zu testen ob auch MFC fehlt, und noch eine für MSXML ... falls im Fall von MSXML überhaupt genauso vorgegangen werden kann ...) Diesen Ansatz wollte ich lieber vermeiden.

    Edit: oder meinst Du ein LoadLibrary direkt auf die CRT und MFC DLLs von Microsoft ? Kann man das so machen ? Vielleicht eine Möglichkeit ... müsste noch überlegen was dafür oder dagegen spricht so vorzugehen ...
    Geändert von Frogger (26.11.08 um 11:21 Uhr)
     

  4. #4
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Ich meine das letztere. Das prüft halt auch nur, ob die DLL irgendwo im Pfad liegt. Ob sich das mit Side-by-Side richtig verhält ist wieder eine andere Geschichte.
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 11.10.10, 15:14
  2. Programm zum Testen der Akkulaufzeit (Win/lin)
    Von Anime-Otaku im Forum Hardware
    Antworten: 0
    Letzter Beitrag: 06.08.07, 09:44
  3. Programm um javascript auf PC zu testen?
    Von judos im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 05.08.07, 02:12
  4. Antworten: 2
    Letzter Beitrag: 26.02.07, 19:38
  5. Antworten: 3
    Letzter Beitrag: 30.01.05, 16:25