Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Package zur Laufzeit austauschen (https://www.delphipraxis.net/50155-package-zur-laufzeit-austauschen.html)

muedermann 21. Jul 2005 10:10


Package zur Laufzeit austauschen
 
Hallo,

dies ist das erste Mal, dass ich eine Frage hier poste und ich würde mich riesig freuen, wenn mir weitergeholfen werden kann.

In meinen Betrieb haben wir ein Programm Verwaltungsprogramm geschrieben und arbeiten seit einiger Zeit mit Delphi 7 Pro.

Da wir mehere Einzelanwendungen aus dem Programm starten, die alle in einem Programmverzeichnis liegen, überlegen wir die Standard Laufzeit-Packages zu verwenden (vcl, rtl ...), da so jede Anwendung deutlich kleiner wird. Zusätzlich möchte ich ein Laufzeit-Package mit befügen, in dem unsere (erstmal sehr wenige) Komponenten ebenfalls als bpl-datei mitgegeben werden. Auf diese greift das Programm zu. Wenn ich eine Komponente ändere und diese in einem neuen Laufzeit-Package mitgebe ist dies kein Problem. Dafür muss ich natürlich auch nicht die EXE neucompilieren, wenn ich eine Methode ändere. (Selbstverständlich darf ich nicht die Parameter ändern!) Das eigentliche Problem ist folgendes:

Ich möchte, dass die Anwendung die Komponenten aus der BPL holt (soweit kein Problem), diese aber dann komplett in den Arbeitsspeicher lädt (und die Datei freigibt), so dass ich die BPL-Datei während das Programm läuft austauschen kann. Zur Zeit ist dies nicht möglich, weil er mir sagt, dass die BPL-Datei gerade (vom Programm) verwendet wird. Ich möchte das Programm aber updaten können, ohne das jeder rausgehen muss. Mir ist bewusst, dass die Änderungen erst nach einem Neustart wirken würden, das ist aber nur logisch und mit eingeplant!

Kann mir jemand helfen???

Bernhard Geyer 21. Jul 2005 10:40

Re: Package zur Laufzeit austauschen
 
Das wird nicht gehen! Dazu müsstest du auf dynamische Package-Loading umsteigen und das Programm die zu ladenden Packages z.B. im Temp-Verzeichnis des Users kopieren und von dort laden.

HERMES 21. Jul 2005 10:56

Re: Package zur Laufzeit austauschen
 
Ich hab das mit nem kleinen (komandozeilen) programm gelöst.

Hauptprog ruft updatetool auf -> hauptprog beendet sich -> dateien werden überschrieben -> hauptprog wird wieder gestartet

muedermann 21. Jul 2005 11:52

Re: Package zur Laufzeit austauschen
 
@ Bernhard:

Ich zweifel deine Aussage nicht wirklich an, jedoch kann mir erklärt werden, warum man meines Wissens nach DLL-Dateien schon einfach ersetzen kann? Die werden doch problemlos überschrieben und befinden sich zur Laufzeit im Arbeitsspeicher, oder irre ich mich da?

@ Hermes:

Leider ist diese Art keine Lösung für mich, da sich mehere Anwender (teilweise sehr viele) gerade im Programm befinden können, und die nicht einfach gekickt werden dürfen, wenn jemand das Update-Tool startet :(

muedermann 25. Jul 2005 08:15

Re: Package zur Laufzeit austauschen
 
Es tut mir ja fast Leid, dass ich meine Frage noch mal pusche, ich weiß, es ist zurecht verpönt. Jedoch kann man das vielleicht nach mehreren Tagen einmal machen. Wenn mir schon keiner direkt bei meinem Problem weiterhelfen kann, so kann mir vielleicht jemand erklären, warum man eine DLL zur Laufzeit austauschen kann und eine BPL nicht?

Robert Marquardt 25. Jul 2005 08:49

Re: Package zur Laufzeit austauschen
 
Schau dir doch mal die Hilfe zu SysUtils an.

Robert_G 25. Jul 2005 08:57

Re: Package zur Laufzeit austauschen
 
Natürlich kannst du Packages zur Laufzeit entladen und neu laden!
Packages sind doch DLLs, allederdings mit ein paar gimmicks geschmückt, so dass man sie als Klassenbibliotheken benutzen kann.
Interessant wären da für dich:
Delphi-Referenz durchsuchenLoadPackage
Delphi-Referenz durchsuchenInitializePackage
Delphi-Referenz durchsuchenUnloadPackage
Delphi-Referenz durchsuchenFinalizePackage
Delphi-Referenz durchsuchenRegisterClass
Delphi-Referenz durchsuchenUnregisterClass


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:46 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-2025 by Thomas Breitkreuz