[erledigt] Nur eine Datei - wie?
- kralle
- Lazarusforum e. V.
- Beiträge: 1193
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
[erledigt] Nur eine Datei - wie?
Moin,
wie kann ich unter Lazarus dafür sorgen, das ich am Ende möglich nur eine Datei erhalte, die ich dann weitergeben kann?
Also, unter Windows, keine extra DLLs. Unter Linux und Co möglichst auch nur eine Datei.
Das z.B. eine Datenbankdatei extra bleiben wird, ist mir klar, aber alles andere wäre schön in einer Datei zu haben.
Auch wenn die Programmdatei da durch größer wird.
Geht das aus Copyright-Gründen eigentlich?
Gruß Heiko
wie kann ich unter Lazarus dafür sorgen, das ich am Ende möglich nur eine Datei erhalte, die ich dann weitergeben kann?
Also, unter Windows, keine extra DLLs. Unter Linux und Co möglichst auch nur eine Datei.
Das z.B. eine Datenbankdatei extra bleiben wird, ist mir klar, aber alles andere wäre schön in einer Datei zu haben.
Auch wenn die Programmdatei da durch größer wird.
Geht das aus Copyright-Gründen eigentlich?
Gruß Heiko
Zuletzt geändert von kralle am Di 23. Jul 2019, 14:20, insgesamt 1-mal geändert.
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
Re: Nur eine Datei - wie?
Ist das nicht immer nur eine Datei ? (Außer den DB-Bibliotheken)
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
- kralle
- Lazarusforum e. V.
- Beiträge: 1193
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
Re: Nur eine Datei - wie?
Moin,
Zusatzfrage: Kann ich mittels "Erstellmodi" und "Hinzufügungen und Beeinflussen" für jedes OS ein Unterverzeichnis erstellen, in dem am Ende nur die ausführbare Datei liegt?
Gruß Heiko
Und warum braucht man dann einen Installer, der die Dateien in die richtigen Unterordner packt?MacWomble hat geschrieben:Ist das nicht immer nur eine Datei ?
Zusatzfrage: Kann ich mittels "Erstellmodi" und "Hinzufügungen und Beeinflussen" für jedes OS ein Unterverzeichnis erstellen, in dem am Ende nur die ausführbare Datei liegt?
Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Nur eine Datei - wie?
Für Windows habe ich diese Methode gefunden: https://www.thoughtco.com/load-a-dll-fr ... ce-1058456kralle hat geschrieben:Und warum braucht man dann einen Installer, der die Dateien in die richtigen Unterordner packt?MacWomble hat geschrieben:Ist das nicht immer nur eine Datei ?
Ich gehe davon aus, dass dies nur unter Windows funktioniert. Plattformübergreifend wäre es am einfachsten, die Bibliotheken in eine temporäres Verzeichnis zu extrahieren und dann von dort zu laden.
Bleibt dann nur noch zu hoffen, dass alle verwendeten Units auch dynamisches Linken unterstützen.
Per Default wird das Programm im Programmverzeichnis abgelegt. Du kannst auch Variablen im Pfad nutzen: release\$(TargetCPU)-$(TargetOS)\project1kralle hat geschrieben:Zusatzfrage: Kann ich mittels "Erstellmodi" und "Hinzufügungen und Beeinflussen" für jedes OS ein Unterverzeichnis erstellen, in dem am Ende nur die ausführbare Datei liegt?
Über Erstellmodi kannst die Pfade für jeden Modus einzeln ändern. Hier hättest du den Vorteil, dass du aus der IDE heraus mehrere Modi auf einmal erstellen kannst. Bei den Variablen oben müsstest du lazbuild mehrfach mit ensprechenden Parametern aufrufen. Passende (Cross-)Compiler jeweils vorausgesetzt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Nur eine Datei - wie?
Unter windows geht das auf jeden fall (keine Ahnung wie, hier hat aber jemand ja schon was gefunden), unter anderen systemen (linux, mac) wär das einzige was mir einfallen würde (was nicht unglaublich hacky wäre) wäre die Bibliotheken als resourcen (oder konstanten) zu speichern und zur laufzeit in ein temporäres Verzeichnis zu entpacken. Das funktioniert auf jeden fall auf jeder plattform
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Nur eine Datei - wie?
Ich habe es mit Resourcen unter Windows gemacht um die Datenbanktreiber in die Applikation zu bekommen.
Mittlerweile arbeite ich mit einen Installer, da ansonsten es nicht sichergestellt ist, das der DB Treiber das auf die Platte kopieren verträgt. Einerseits ist das kopierenin den Programmpfad schon mal durch ein sauber konfiguriertes System unterbunden. Andererseits stossen sich die AV Programme oft an dem Vorgang. Deshalb gleich richtig mit einen Installer. Ist zwar das erste mal mehr aufwand, später aber nur noch Copy & Paste
Mittlerweile arbeite ich mit einen Installer, da ansonsten es nicht sichergestellt ist, das der DB Treiber das auf die Platte kopieren verträgt. Einerseits ist das kopierenin den Programmpfad schon mal durch ein sauber konfiguriertes System unterbunden. Andererseits stossen sich die AV Programme oft an dem Vorgang. Deshalb gleich richtig mit einen Installer. Ist zwar das erste mal mehr aufwand, später aber nur noch Copy & Paste
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Nur eine Datei - wie?
Installer haben noch einen vorteil, wenn es netzwerkinstaller sind können die immer die neuste version runterladen. Außerdem wenn man konfig dateien hat kann der installer bereits einen default anlegen.
Grade für größere projekte die ordnerstrukturen und zusätzliche daten brauchen verwende ich immer nen netzwerk installer
Grade für größere projekte die ordnerstrukturen und zusätzliche daten brauchen verwende ich immer nen netzwerk installer
- kralle
- Lazarusforum e. V.
- Beiträge: 1193
- Registriert: Mi 17. Mär 2010, 14:50
- OS, Lazarus, FPC: Manjaro Linux, Mint und Windows 10 ,Lazarus 3.99, FPC-Version: 3.3.1
- CPU-Target: 64Bit
- Wohnort: Bremerhaven
- Kontaktdaten:
Re: Nur eine Datei - wie?
Moin,
erst einmal Danke, für Eure vielen Antworten.
Inzwischen verstehe ich, dass es doch sinnvoll sein kann Installer zu nutzen.
Das was ich so programmiere, sind meistens kleine Tools, die keine DLL oder der gleichen nachladen und so als einen Datei weitergegeben werden können.
Gruß Heiko
erst einmal Danke, für Eure vielen Antworten.
Inzwischen verstehe ich, dass es doch sinnvoll sein kann Installer zu nutzen.
Das was ich so programmiere, sind meistens kleine Tools, die keine DLL oder der gleichen nachladen und so als einen Datei weitergegeben werden können.
Gruß Heiko
OS: Manjaro Linux, Linux Mint und Windows 10
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
FPC-Version: 3.3.1 , Lazarus 3.99
+ Delphi XE7SP1
- af0815
- Lazarusforum e. V.
- Beiträge: 6763
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: [erledigt] Nur eine Datei - wie?
Egal ob DB oder fpReport, man braucht öfters als man denkt eine dll oder so.
Gerade bei den vermeintlich kleinen Tools hat es mich am meisten Zeit gekostet.
Edit: Ein Beispiel wie man eine dll aus einer Resource ins Programmverzeichnis extrahieren kann. Das Beispiel ist mit dem MS-Sql Datenbanktreiber- Dazu muss dieser in den Resourcen unter dem Namen SYDBDB eingebunden worden sein. Das geht natürlich mit allen Dateien Resourcen so.
Ich habe die Schnippsel aus einen größeren Code herauskopiert, kann sein, das die uses nicht komplett ist. Die Funktion sieht nach, o der Treiber da ist, ansonsten wird er aus den Resourcen erstellt.
Gerade bei den vermeintlich kleinen Tools hat es mich am meisten Zeit gekostet.
Edit: Ein Beispiel wie man eine dll aus einer Resource ins Programmverzeichnis extrahieren kann. Das Beispiel ist mit dem MS-Sql Datenbanktreiber- Dazu muss dieser in den Resourcen unter dem Namen SYDBDB eingebunden worden sein. Das geht natürlich mit allen Dateien Resourcen so.
Ich habe die Schnippsel aus einen größeren Code herauskopiert, kann sein, das die uses nicht komplett ist. Die Funktion sieht nach, o der Treiber da ist, ansonsten wird er aus den Resourcen erstellt.
Code: Alles auswählen
uses
SysUtils, FileUtil, LCLType;
function LoadFromResourceAndMakeFile(Instance: THandle; const ResName: String;
const FileAndPathName: String): Boolean;
var
S: TResourceStream;
F: TFileStream;
begin
Result := False;
// create a resource stream which points to our resource
S := TResourceStream.Create(Instance, ResName, RT_RCDATA);
try
// create a file in the application directory
F := TFileStream.Create(FileAndPathName, fmCreate);
try
F.CopyFrom(S, S.Size); // copy data from the resource stream to file stream
Result:=True;
finally
F.Free; // destroy the file stream
end;
finally
S.Free; // destroy the resource stream
end;
end;
function CheckPrerequisites: boolean;
var
Drivername: String;
begin
Result:= False;
Drivername:= IncludeTrailingPathDelimiter(ExtractFileDir(ProgramDirectory))+ 'sybdb.dll';
try
if not FileExists(Drivername) then
Result:= LoadFromResourceAndMakeFile(HINSTANCE,'SYBDB',Drivername)
else
Result := True;
except
DebugLn('CheckPrerequisites cannot create Driverfile sybdb.dll');
Result:= false;
end;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).