![]() |
Portable Firebird Server 2.1.3
Liste der Anhänge anzeigen (Anzahl: 2)
Mehr als technische Übung zur Überprüfung der Machbarkeit habe ich eine kompakte, multiuser-fähige und portable Version des Firebird-Server zusammengestellt:
- Single Exe (knapp 4MB inkl. aller Tools wie gback, gfix etc.) - Simple GUI - Läuft ohne Installation auch im Non-Admin-Mode - Multi-Instanzfähig durch freie Wahl des Ports - Embedded, aber Multiuser-fähig - Automtische Bereitstellung einer internen Alias.conf durch das Scannen aller fdb-Dateien im Applikationverzeichnis (und darunter) - Standard-Anmeldung (SYSDBA/masterkey) Prinzipiell funktioniert das mit jeder Firebird-Version. Denkbar ist auch eine Multiserverversion der unterschiedlichen Versionen. Es gibt auch zur Laufzeit nur 1 Datei. Keine Unterverzeichnisse oder temporäres Entpacken o.ä. (also nicht wie bei Xenocode oder Thinapp.). Die einzige Spur eines laufenden FB-Servers ist die unvermeidliche *.lck-Datei, die im Programmverzeichnis angelegt wird. Leider bin ich bislang an der Virtualisierung dieser letzten Datei gescheitert. Ist der FB-Server gestartet, so erkennt man im Taskmanager 2 Instanzen einer dcServer.exe: 1. GUI, 2. FB-Server. -- Andreas |
Re: Portable Firebird Server 2.1.3
Wirklich sehr interessant, schade dass du nicht zeigst, wie man den Server selber in seine Anwendung integrieren kann.
|
Re: Portable Firebird Server 2.1.3
Hallo Andreas,
das hört sich sehr interessant an. Meine Fragen sind : :arrow: Wie kann ich das für eigene Anwendungen nutzen :?: :arrow: Muss ich trotzdem etwas von Firebird installieren :?: :arrow: Mit welchen Komponenten kann ich auf die Datenbank des Portable Firebird Servers zugreifen :?: Edit : Aber macht das ganze nicht eigentlich schon der Firebird Embedded Server ? |
Re: Portable Firebird Server 2.1.3
Für den embedded gelten aber Einschränkungen
Da diese Version einen normalen Server startet sollte jede Komponente funktionieren. |
Re: Portable Firebird Server 2.1.3
Zitat:
Zitat:
Als Komponenten würde ich mir UniDAC oder AnyDAC ansehen. Je nach Delphi-Version gibt es auch noch IBX, IBO, ZEOS, FUIB etc. Ab Delphi 2010 geht es auch nativ. Ich werde mich nun mit UniDAC unter D2009/2010 beschäftigen (und damit IBO seit 1997 das erste Mal untreu). Den embedded FB-Server nutze ich schon sehr lange. Dort hat mich immer die vorgegebene Verzeichnis-Struktur gestört, die portable Anwendungen behindern. Nun kann ich den Server innerhalb meines Programmes ausliefern. Die Demo ist ja nur ... eine Demo ;). Schön ist auch, dass das Ganze in eingeschränkter Umgebung funktioniert: Lediglich eine Firewall meckert und schon läuft's, auch unabhängig von anderen bereits installierten Instanzen. Zitat:
-- Andreas |
Re: Portable Firebird Server 2.1.3
Klingt ja sehr interessant - aber leider kann ich das Demo nicht laden,
da das Download-Anzahl-Limit erreicht ist. Kannst du es mir trotzdem senden? Mfg Olaf |
Re: Portable Firebird Server 2.1.3
Für mich klingt das auch interesant!
Würde mich sehr interessieren wie du das gelöst hast. |
Re: Portable Firebird Server 2.1.3
Ich habe das Demo-Projekt noch einmal aktiviert (
![]() Hier noch ein paar Infos zur Vorgehensweise und zu verwendeten Tools: Ein Standard-Firebird-Verzeichnis hat knapp 9MB. Das habe ich in eine Ressourcen-Datei gepackt. Mit ![]()
Delphi-Quellcode:
Die resultierende Exe hat ca. 11-12 MB, die dann mittels
procedure TForm1.StartClick(Sender: TObject);
var s:string;path:string; begin path:=ExtractFilepath(Application.ExeName)+''; if not FileExists(path+'\bin\fbclient.dll') then CreateVirtualFile(path+'\bin\fbclient.dll','RES__BIN_FBCLIENT_DLL'); if not FileExists(path+'\bin\fbrmclib.dll') then CreateVirtualFile(path+'\bin\fbrmclib.dll','RES__BIN_FBRMCLIB_DLL'); if not FileExists(path+'\bin\fbserver.exe') then CreateVirtualFile(path+'\bin\fbserver.exe','RES__BIN_FBSERVER_EXE'); if not FileExists(path+'\bin\gbak.exe') then CreateVirtualFile(path+'\bin\gbak.exe','RES__BIN_GBAK_EXE'); if not FileExists(path+'\bin\gfix.exe') then CreateVirtualFile(path+'\bin\gfix.exe','RES__BIN_GFIX_EXE'); if not FileExists(path+'\bin\gsec.exe') then CreateVirtualFile(path+'\bin\gsec.exe','RES__BIN_GSEC_EXE'); if not FileExists(path+'\bin\gstat.exe') then CreateVirtualFile(path+'\bin\gstat.exe','RES__BIN_GSTAT_EXE'); if not FileExists(path+'\bin\ib_util.dll') then CreateVirtualFile(path+'\bin\ib_util.dll','RES__BIN_IB_UTIL_DLL'); if not FileExists(path+'\bin\icudt30.dll') then CreateVirtualFile(path+'\bin\icudt30.dll','RES__BIN_ICUDT30_DLL'); if not FileExists(path+'\bin\icuin30.dll') then CreateVirtualFile(path+'\bin\icuin30.dll','RES__BIN_ICUIN30_DLL'); if not FileExists(path+'\bin\icuuc30.dll') then CreateVirtualFile(path+'\bin\icuuc30.dll','RES__BIN_ICUUC30_DLL'); if not FileExists(path+'\bin\Microsoft.VC80.CRT.manifest') then CreateVirtualFile(path+'\bin\Microsoft.VC80.CRT.manifest','RES__BIN_MICROSOFT_VC80_CRT_MANIFEST'); if not FileExists(path+'\bin\msvcp80.dll') then CreateVirtualFile(path+'\bin\msvcp80.dll','RES__BIN_MSVCP80_DLL'); if not FileExists(path+'\bin\msvcr80.dll') then CreateVirtualFile(path+'\bin\msvcr80.dll','RES__BIN_MSVCR80_DLL'); if not FileExists(path+'\bin\nbackup.exe') then CreateVirtualFile(path+'\bin\nbackup.exe','RES__BIN_NBACKUP_EXE'); if not FileExists(path+'\firebird.conf') then CreateVirtualFile(path+'\firebird.conf','RES__FIREBIRD_CONF'); if not FileExists(path+'\firebird.log') then CreateVirtualFile(path+'\firebird.log','RES__FIREBIRD_LOG'); if not FileExists(path+'\firebird.msg') then CreateVirtualFile(path+'\firebird.msg','RES__FIREBIRD_MSG'); if not FileExists(path+'\intl\fbintl.conf') then CreateVirtualFile(path+'\intl\fbintl.conf','RES__INTL_FBINTL_CONF'); if not FileExists(path+'\intl\fbintl.dll') then CreateVirtualFile(path+'\intl\fbintl.dll','RES__INTL_FBINTL_DLL'); if not FileExists(path+'\security2.fdb') then CreateVirtualFile(path+'\security2.fdb','RES__SECURITY2_FDB'); if not FileExists(path+'\udf\fbudf.dll') then CreateVirtualFile(path+'\udf\fbudf.dll','RES__UDF_FBUDF_DLL'); if not FileExists(path+'\udf\ib_udf.dll') then CreateVirtualFile(path+'\udf\ib_udf.dll','RES__UDF_IB_UDF_DLL'); if not FileExists(path+'\aliases.conf') then begin CreateVirtualFile(path+'\aliases.conf',''); //Leere Datei CreateAliases(path+'\aliases.conf'); //Sammle die Datenbanken im Unterverzeichnis end; AliasListBox.Items.LoadFromFile(path+'\aliases.conf'); if AliasListBox.Items.Count>0 then begin AliasListBox.ItemIndex:=0; SetCS; end; fbserverhandle:=0; s:=path+'\bin\fbserver.exe'; caption:=s; if FileExists(s) then begin Caption:=Format(Application.Title+' (gestartet auf %s)',[JvComputerInfoEx1.Identification.IPAddress]); fbserverhandle:=ExecAndWait(s,Format(' -a -n -p %d',[PortEdit.Value])); //Starte den Child-Prozess end; end; procedure TForm1.StopClick(Sender: TObject); begin if fbserverhandle>0 then begin Caption:=Format(Application.Title+' (gestoppt auf %s)',[JvComputerInfoEx1.Identification.IPAddress]); TerminateProcess(fbserverhandle, 1); CloseHandle(fbserverhandle); fbserverhandle:=0; end; end; initialization BoxedAppSDK_Init; finalization BoxedAppSDK_Exit; ![]() -- Andreas |
Re: Portable Firebird Server 2.1.3
Den Downloadlink im 1.Beitrag hat es erlegt... // Martin
|
Re: Portable Firebird Server 2.1.3
Zitat:
-- Andreas |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz