Manifeste und Firebird (embedded)
-
Hallo,
ich habe eine MFC Anwendung und würde dort gerne Firebird (embedded-Variante) verwenden.
Alle DLLs befinden sich direkt im Anwendungs-Ordner und werden nicht installiert (in irgendwelche Systemverzeichnisse).
Ziel ist es, dass ich die MFC Anwendung durch einfaches kopieren des Ordners weitergeben kann.Auf einem XP Rechner gibt es allerdings Probleme.
Beim ersten Datenbankzugriff wirft IBPP (C++ Wrapper für Firebird) eine Ausnahme (fbclient.dll nicht gefunden). Versuche ich isql (Firebird eigenes Tool) zu starten kommt die Meldung:
Die Anwendung konnte nicht richtig initialisiert werden (0xc015002). Klicken Sie auf "OK", um die Anwendung zu beenden.Nun, ich vermute es liegt daran, dass unterschiedliche Versionen der msvcr80.dll und msvcp80.dll verwendet werden.
Meine Anwendung braucht laut dependency-walker Version 8.0.50727.762, fbclient.dll die Version 8.0.50727.42.
Ich habe auch ein wenig gegoogled und z.B.
http://www.c-plusplus.net/forum/viewtopic-var-t-is-181577-and-postdays-is-0-and-postorder-is-asc-and-start-is-10-and-sid-is-f5844ae472bd88d950900d27edad8eb6.html
oder
http://mcblogs.craalse.de/sku?title=visual_studio_2005_runtimes_part_2_sich&more=1&c=1&tb=1&pb=1
gefunden.Allerdings scheitert es wohl daran, 2 verschiedene Versionen der DLLs in dem Manifest unterzubekommen.
Das Programm läuft im übrigen auf einem Vista Rechner problemlos. Dort ist kein Studio installiert.
Hat jemand eine Idee wie ich das ganze lösen kann?
-
x.762 ist SP1 der Runtime.
http://www.microsoft.com/downloads/details.aspx?familyid=200b2fd9-ae1a-4a14-984d-389c36f85647&displaylang=enIst das installiert?
Simon
-
Es soll ja nichts installiert werden.
Ich will die DLLs (MFC,CRT) innerhalb des Ordners mitliefern.
Das klappt auch.
Seit ich Firebird dazu genommen habe (nicht selbst kompiliert) gibt es diese Probleme.
-
ja, weil der Unterordner und die entsprechenden DLLs liegen gleich heissen, jedoch nicht dieselbe Version haben. DLL- Hell.
1. Lsg: Installiere die Runtime und die Runtime SP1
2. Lsg: Lege die Runtime dazu (für firebird), Linke die Runtime SP1 statisch dazu.Bin mir nicht ganz sicher obs funktioniert...
Simon
-
Die Frage ist welcheManifeste in der Firebird DLL hinterlegt sind.
Ansonsten suche mal nach Private Assmeblies:
http://msdn.microsoft.com/en-us/library/aa375674(VS.85).aspxSiehe auch mein Artikel hier:
http://www.codeproject.com/KB/cpp/PrivateAssemblyProjects.aspxWenn fbclient.dll ein Manifest hat, dann muss auch die entsprechende DLL der CRT/MFC im Side by Side Store instaliert sein. Ansonsten müsstest Du dfas Manifest manipulieren.
-
Ich habe mal ein kleines Beispielprojekt zusammengestellt:
http://rapidshare.com/files/134951997/SDI.zip.htmlEnthält
- das Projekt
- vorkompilierte exe ohne Firebird
- vorkompilierte exe mit Firebird: Beim Klick auf den Button wird versucht die Datenbank zu öffnen.Das Manifest der Exe wird generiert und anschliessend habe ich es bearbeitet wie in den Artikeln. In dem Ordner mit den beiden kompilierten Anwendungen ist das geänderte Manifest.
2 Probleme (auf XP-Rechnern):
-
Datenbankzugriff schlägt fehl
Mit Firebird startet die Anwendung, beim Datenbankzugriff (klick auf den Button) kommt die Fehlermeldung (fbclient.dll nicht gefunden).
Ohne Firebird startet die Anwendung. -
Fenstergröße
Das Fenster ist nicht groß genug auf einigen XP-Rechnern (-> scrolling notwendig).
Vielleicht hat ja jemand die Zeit und Lust sich das ganze anzuschauen. Ich muss wissen was falsch ist.
Wichtig ist: es soll nichts installiert werden. Nur der Anwendungsordner soll kopiert werden. Er sollte also alle notwendigen Dateien enthalten.
--------------------------------------
Ich denke ich habe die Manifeste wie in den Artikeln beschrieben angepasst. Das Problem ist wohl die unterschiedliche benötigte Version der MFC-Anwendung und die von Firebird.
-
-
Ich habe jetzt das in der Firebird DLL eingebettete Manifest mit mt geändert
(http://msdn.microsoft.com/en-us/library/ms235591.aspx).
Das funktioniert; kann mir aber kaum vorstellen, dass das so gedacht ist.Mh. Naja.