Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   fbclient.dll korrekt installieren (https://www.delphipraxis.net/160887-fbclient-dll-korrekt-installieren.html)

Rainer Wolff 6. Jun 2011 15:05

fbclient.dll korrekt installieren
 
Hallo,

nachdem ich in der Firebird-Doku gelesen habe, dass die fbclient.dll vorzugsweise im Firebird-Installationspfad liegen soll und nicht ins Systemverzeichnis kopiert werden sollte, frage ich mich, wie die sauberste Installation denn aussehen könnte.

Mein Gedanke war, in meinem Delphi-Programm bei der Initialisierung den FB-Installationspfad aus der Registry zu lesen (HKEY_LOCAL_MACHINE\SOFTWARE\Firebird Project\Firebird Server\Instances lt. Doku) und dann bei der dbx-Treiberinitialisierung die Vendorlib mit dem kompletten Pfad zu setzen.

Aber anscheinend erwartet dbx unbedingt die fbclient.dll und wertet einen Pfad oder eine anders benannte dll bei der Vendorlib gar nicht aus.

Ich kann natürlich eine fbclient.dll von meinem Entwicklungsrechner in mein Programmverzeichnis mit installieren, aber dann muss Firebird-Version und fbclient.dll im Programmverzeichnis immer zusammenpassen.

Oder ich müsste meinem Installationsprogramm beibringen, den Firebird-Pfad in den Suchpfad mit aufzunehmen.

Wer hat andere Ideen?

Gruß Rainer

haentschman 6. Jun 2011 19:59

AW: fbclient.dll korrekt installieren
 
Hallo Rainer... :hi:

mal so dazwischengefragt... Was machst du bei einem Client, der den FB Server nicht installiert hat ? Dort existieren die FB Installations Ordner nicht. Imho gibt es nur 2 Möglichkeiten:
1. die Client DLL im Programm Ordner
2. die Client DLL ins System Verzeichnis

Ich für meinen Teil lege sie immer ins System Verzeichnis. Wenn du mehrere Firebird Versionen parallel betreiben möchtest ist auf dem Entwicklungsrechner der FB Pfad am sichersten.

scrat1979 6. Jun 2011 20:23

AW: fbclient.dll korrekt installieren
 
Zitat:

Zitat von haentschman (Beitrag 1104907)
Hallo Rainer... :hi:

mal so dazwischengefragt... Was machst du bei einem Client, der den FB Server nicht installiert hat ? Dort existieren die FB Installations Ordner nicht. Imho gibt es nur 2 Möglichkeiten:
1. die Client DLL im Programm Ordner
2. die Client DLL ins System Verzeichnis

Ich für meinen Teil lege sie immer ins System Verzeichnis. Wenn du mehrere Firebird Versionen parallel betreiben möchtest ist auf dem Entwicklungsrechner der FB Pfad am sichersten.

Ich bin mir nicht ganz sicher, aber gibt es nicht z.B. bei den IBDAC-Komponenten die Möglichkeit, eine dll (inkl. Pfad) anzugeben? Macht natürlich aber nur Sinn, wenn sicher ist, dass die Datei dort mit Sicherheit existiert. :gruebel:

FBrust 6. Jun 2011 21:29

AW: fbclient.dll korrekt installieren
 
Hallo,

ich für meinen Teil lege die DLL meiner serverbasierten Programme immer ins Programmverzeichnis, um zu vermeiden, bestehenden Installationen ins Gehege zu kommen.

Außerdem vermeide ich es, dass andere Programme die DLL, die für mein Programm notwendig ist mit einer älteren Version überschreiben.

@scrat1979: Ja, man kann bei den Connections eine DLL inkl. Pfad angeben. Ob die DLL dann auch existiert, lässt sich ja bei Programmstart überprüfen (wenn z. B. die Pfadangabe aus Programmeinstellungen ausgelesen wird).




Gruß
Frank

blackfin 6. Jun 2011 21:49

AW: fbclient.dll korrekt installieren
 
Was spricht eigentlich dagegen, bei der Installation den Suchpfad der spezifischen Applikation zur DLL unter
Code:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
(+ \Project.exe\Path) einzutragen und die DLL dann im eingetragenen (Unter)-Verzeichnis der Applikation abzulegen?

Ausserdem gibt es ja auch noch die WinAPI-Funktion SetDllDirectory, die aber ja nur für dynamisch geladene DLLs geht. Was bei der fbclient.dll ja möglich sein sollte.

Was auch noch eine "nette" Variante ist, die ich schon mal gemacht habe:
Die fbclient.dll als Resource in die EXE kompilieren oder in einem eigenen VFS ausliefern und über das BoxedApp SDK diese dann beim Programmstart als virtuelle Datei im Speicher erzeugen, die dann dynamisch geladen wird.
Ok, ich geb zu, diese Methode ist krank, aber so kann man Firebird in einem "Single EXE"-Programm ausliefern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz