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:
http://www.delphipraxis.net/download.php?id=27832
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
)