[erledigt] Nur eine Datei - wie?

Für Fragen rund um die Ide und zum Debugger

[erledigt] Nur eine Datei - wie?

Beitragvon kralle » 22. Jul 2019, 15:34 [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
Zuletzt geändert von kralle am 23. Jul 2019, 13:20, insgesamt 1-mal geändert.
Linux Mint 19.3 , FPC-Version: 3.3.1 , Lazarus 2.1.0
+ Delphi XE7SP1
kralle
Lazarusforum e. V.
 
Beiträge: 631
Registriert: 17. Mär 2010, 14:50
Wohnort: Bremerhaven
OS, Lazarus, FPC: Linux Mint 19.2 , FPC 3.0.4 , Lazarus 2.0.x -Win10 & XE7Pro | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 22. Jul 2019, 15:35 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.
MacWomble
Lazarusforum e. V.
 
Beiträge: 972
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 19.3 Cinnamon / FPC/Lazarus | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon kralle » 22. Jul 2019, 15:40 Re: Nur eine Datei - wie?

Moin,

MacWomble hat geschrieben:Ist das nicht immer nur eine Datei ?

Und warum braucht man dann einen Installer, der die Dateien in die richtigen Unterordner packt?

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
Linux Mint 19.3 , FPC-Version: 3.3.1 , Lazarus 2.1.0
+ Delphi XE7SP1
kralle
Lazarusforum e. V.
 
Beiträge: 631
Registriert: 17. Mär 2010, 14:50
Wohnort: Bremerhaven
OS, Lazarus, FPC: Linux Mint 19.2 , FPC 3.0.4 , Lazarus 2.0.x -Win10 & XE7Pro | 
CPU-Target: 64Bit
Nach oben

Beitragvon Socke » 22. Jul 2019, 18:11 Re: Nur eine Datei - wie?

kralle hat geschrieben:
MacWomble hat geschrieben:Ist das nicht immer nur eine Datei ?

Und warum braucht man dann einen Installer, der die Dateien in die richtigen Unterordner packt?

Für Windows habe ich diese Methode gefunden: https://www.thoughtco.com/load-a-dll-fr ... ce-1058456
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.

kralle 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?

Per Default wird das Programm im Programmverzeichnis abgelegt. Du kannst auch Variablen im Pfad nutzen: release\$(TargetCPU)-$(TargetOS)\project1
Ü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
Socke
Lazarusforum e. V.
 
Beiträge: 2690
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon Warf » 22. Jul 2019, 19:05 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
Warf
 
Beiträge: 1378
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: MacOS | Win 10 | Linux | 
CPU-Target: x86_64
Nach oben

Beitragvon af0815 » 22. Jul 2019, 20:34 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
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
af0815
 
Beiträge: 3961
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

Beitragvon Warf » 23. Jul 2019, 13:13 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
Warf
 
Beiträge: 1378
Registriert: 23. Sep 2014, 16:46
Wohnort: Aachen
OS, Lazarus, FPC: MacOS | Win 10 | Linux | 
CPU-Target: x86_64
Nach oben

Beitragvon kralle » 23. Jul 2019, 13:19 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
Linux Mint 19.3 , FPC-Version: 3.3.1 , Lazarus 2.1.0
+ Delphi XE7SP1
kralle
Lazarusforum e. V.
 
Beiträge: 631
Registriert: 17. Mär 2010, 14:50
Wohnort: Bremerhaven
OS, Lazarus, FPC: Linux Mint 19.2 , FPC 3.0.4 , Lazarus 2.0.x -Win10 & XE7Pro | 
CPU-Target: 64Bit
Nach oben

Beitragvon af0815 » 23. Jul 2019, 16:53 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.

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).
af0815
 
Beiträge: 3961
Registriert: 7. Jan 2007, 10:20
Wohnort: Niederösterreich
OS, Lazarus, FPC: FPC 3.2 Lazarus 2.0 per fpcupdeluxe | 
CPU-Target: 32Bit (64Bit)
Nach oben

• Themenende •

Zurück zu Benutzung der IDE



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried