![]() |
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??? |
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.
|
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 |
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 :( |
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?
|
Re: Package zur Laufzeit austauschen
Schau dir doch mal die Hilfe zu SysUtils an.
|
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: ![]() ![]() ![]() ![]() ![]() ![]() |
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