![]() |
Runtime-Packages unter Windows 2000
Hi,
Ich muss in einem Delphi-Programm zur Laufzeit einige *.bpl Dateien nachladen, deshalb hab ich das Programm mit Runtime-Packages gebaut. D.h. die ganzen Delphi BPLs müssen beim Kunden im Programm-Verzeichnis liegen. Zusätzlich hab ich auch noch einen Dienst, der ebenfalls *.bpls nachladen muss, daher auch dieser wieder mit Runtime-Packages gebaut und in das selbe Verzeichnis wie das Delphi-Programm gelegt. Sowohl der Dienst als auch das Delphi-Programm laufen unter Windows XP problemlos parallel. Unter Windows 2000 gibt es allerdings folgendes Problem: Starte ich zuerst das Delphi-Programm und dann den Dienst, mach das Delphi-Programm wieder zu und öffne es erneut -> klappts. Starte ich zuerst den Dienst und dann das Delphi-Programm beendet sich das Programm mit der Fehlermeldung: ![]() Meiner Meinung nach gibts da ein Rechteproblem unter Windows 2000. Denn ich vermute, dass die BPL genauso wie DLL Dateien von Windows nur einmal geladen und mit einem Refcount versehen werden. Da aber der Dienst (wenn er zuerst startet) mit SYSTEM-Konto Rechten läuft folglich auch die *.BPL (rtl100.bpl usw.) Dateien mitläd (und die ebenfalls unter SYSTEM-Konto Rechten laufen), hat das Delphi-Programm ein Problem - denn Windows hat die benötigten *.BPL Dateien zwar im Speicher, aber der Programmcode darf nicht von dem Delphi-Programm aus ausgeführt werden. Wenn ich wie oben beschrieben zuerst das Programm starte, läd Windows die *.BPL Dateien, aber mit User-Rechten, folgich kann ein höher priviligierter Prozess (in dem Fall der Dienst) auch mit drauf zugreifen. Hat da jemand eine Lösung? (Benutzerkonto des Dienstes ändern ist KEINE Lösung :P ) |
Re: Runtime-Packages unter Windows 2000
Hi, nein das sollte niemals ein Problem sein. Ich kann dir garantieren, daß dann so ziemlich kein Programm nach dem Einloggen die ADVAPI32.DLL laden könnte (die wird von so ziemlich jedem Win32-Service benutzt). Das Problem muß also ein anderes sein.
|
Re: Runtime-Packages unter Windows 2000
BPL war noch nie die Stärke von Delphi. Gibt nur Probleme.
|
Re: Runtime-Packages unter Windows 2000
Zitat:
Ich könnte mir z.B. gut vorstellen das dieser Standard-Code irgendwo buggy ist. Benutze übrigens Delphi 2006 Prof. |
Re: Runtime-Packages unter Windows 2000
BPLs sind DLLs. Haben eben nur eine andere Endung. Gilt ebenso für OCX-Dateien usw. usf.
Apache nennt sie - wie sonst in Unix üblich - SO (für Shared Object). Die Endung ist hier also irrelevant. |
Re: Runtime-Packages unter Windows 2000
Sagen wir besser:
BPLs sind mehr als DLLs. Letztendlich kann man BPLs nicht in anderen Sprachen (außer BC++) verwenden - oder nur sehr eingeschränkt. BPLs exportieren Funktionen, Komponenten und insbesondere Klasse nur für Delphianer. Was mir schon sehr oft passiert ist, dass Programme mit BPLs garnicht erst angelaufen sind. Absturz hier, Absturz da. Dazu kommt noch die Abhängigkeit - dann darf eine Unit nicht in zwei Packages gleichzeitig sein...usw. ![]() |
Re: Runtime-Packages unter Windows 2000
OK, habs nun einigermaßen lösen können.
Ich verwende Komponenten der JEDI Library, und die greifen teilweise auf DirectDraw von DirectX zurück. Installiert man die neuste DirectX Version verschwindet das Problem. Allerdings muss da irgendwo eine Race Condition drin sein, denn ein anderes Programm das mit Runtime Packages und JEDI Komponenten gebaut wurde läuft einwandfrei (also auch ohne DirectX Update). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:40 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