Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Designtime-Package in Anwendung (https://www.delphipraxis.net/193514-designtime-package-anwendung.html)

himitsu 9. Aug 2017 11:06

Delphi-Version: XE

Designtime-Package in Anwendung
 
Moin,

die Delphi-IDE meckert fröhlich, wenn man versucht ein Runtime-Package (Runtime only) in ihr zu laden/installieren.


Ich habe hier zwei Design-Time-Packages (Design-Time only), welche ein Kollege nun blöder Weise in eines unserer Runtime-Packages gelinkt hatte (Required).
Die beliebte DesignIde.bpl und ein eigenes Package.

Nur warum meckert hier nicht das Delphi-Programm, beim Versuch das zu laden?
Vorallem das eigene Package hatte ich damals absichtlich auf "Design-Time" gestellt, um sowas zu verhindern und um nun zu merken, dass es absolut keine Wirkung hat.

Auch Runtime-Packages kann man problemlos in der IDE installieren, wenn man dafür nicht den "Packages Installieren"-Dialog verwendet.
(wenn sie von anderen Packages verwendet werden, die gerade geladen sind, dann kann man sie auch nicht über den "Packages Installieren"-Dialog deinstallieren :stupid:)

Uwe Raabe 9. Aug 2017 12:18

AW: Designtime-Package in Anwendung
 
Zitat:

Zitat von himitsu (Beitrag 1378383)
Nur warum meckert hier nicht das Delphi-Programm, beim Versuch das zu laden?

Vermutlich, weil alle Packages auf deinem Rechner gefunden werden. Steht dein Delphi-Bin-Verzeichnis zufällig im PATH?

Der Unterschied zu Runtime ist, daß du die Delphi Design-Packages eben nicht weitergeben darfst.

himitsu 9. Aug 2017 12:27

AW: Designtime-Package in Anwendung
 
Das DesignIde-Package vom Delphi wird nicht mitgegeben.
Unser eigenes Package schon ... wird alles ins selbe Verzeichnis kompiliert.
Aus der Setup.exe könnte ich das eigene Package ausschließen (muß nur noch schnell bissl NSIS Script lernen), und ich muß auch mal schauen, wie ich es aus der ZIP entfernen kann, die der FinalBuilder aus dem Verzeichnis genieriert (für kleine/schnelle Updates der Testinstalationen) ... das wird aber bestimmt möglich sein.

Unschön ist aber, dass das Programm (Runtime) eben nicht gleich meckert, wenn in ihm ein Design-Time-Only-Package geladen wird ... so fällt es erst Ende der Wochen beim Kunden auf, wenn dort das Test-System installiert wird.
Ich hatte es gestern nur zufällig jetzt beim Auschecken (SVN) entdeckt, dass dort diese Packages verlinkt werden.

Uwe Raabe 9. Aug 2017 13:05

AW: Designtime-Package in Anwendung
 
Zitat:

Zitat von himitsu (Beitrag 1378391)
Unschön ist aber, dass das Programm (Runtime) eben nicht gleich meckert, wenn in ihm ein Design-Time-Only-Package geladen wird

Moment - das Programm meckert nicht, wenn es die DesingIde.bpl verwendet, sie aber auf dem System nicht findet?

mkinzler 9. Aug 2017 13:17

AW: Designtime-Package in Anwendung
 
Auf seinem Rechner nicht, da vorhanden.

Uwe Raabe 9. Aug 2017 14:12

AW: Designtime-Package in Anwendung
 
Zitat:

Zitat von mkinzler (Beitrag 1378396)
Auf seinem Rechner nicht, da vorhanden.

Wie soll die EXE denn dann beurteilen, ob das OK ist oder nicht? Grundsätzlich gibt es ja kein Verbot Designtime-Packages zu verwenden, sonst würde es beim Start der Delphi IDE ja haufenweise Fehler hageln.

Uwe Raabe 9. Aug 2017 14:35

AW: Designtime-Package in Anwendung
 
Du könntest mit folgendem Code aber überprüfen, ob ein Designtime-Package von der Applikation geladen wurde:

Delphi-Quellcode:
procedure InfoProc(const Name: string; NameType: TNameType; Flags: Byte; Param: Pointer);
begin
end;

function ModuleIsNoDesignTime(HInstance: NativeInt; Data: Pointer): Boolean;
var
  Flags: Integer;
begin
  GetPackageInfo(HInstance, nil, Flags, InfoProc);
  if Odd(Flags shr 1) then begin
    raise Exception.Create('DesignTime-Package verwendet!');
  end;
  Result := True;
end;

procedure CheckNoDesignTime;
begin
  EnumModules(ModuleIsNoDesignTime, nil);
end;

himitsu 9. Aug 2017 14:35

AW: Designtime-Package in Anwendung
 
Jupp, es fand die DesignIde.bpl ... noch, da es noch nur auf dem Entwicklungssystemen getestet/entwickelt wurde.

himitsu 9. Aug 2017 15:06

AW: Designtime-Package in Anwendung
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1378400)
Wie soll die EXE denn dann beurteilen, ob das OK ist oder nicht? Grundsätzlich gibt es ja kein Verbot Designtime-Packages zu verwenden, sonst würde es beim Start der Delphi IDE ja haufenweise Fehler hageln.

Ich dachte einfach ganz naiv, dass z.B. LoadLibrary weiß, ob es gerade in der Delphi-IDE läuft und dementsprechend DesignTime-Only oder RuntimeTime-Only meldet, wenn sie im "Falschen" geladen werden.

Uwe Raabe 9. Aug 2017 15:27

AW: Designtime-Package in Anwendung
 
Zitat:

Zitat von himitsu (Beitrag 1378410)
Ich dachte einfach ganz naiv, dass z.B. LoadLibrary weiß, ob es gerade in der Delphi-IDE läuft und dementsprechend DesignTime-Only oder RuntimeTime-Only meldet, wenn sie im "Falschen" geladen werden.

Na ja, es mag ja auch andere Programme neben der Delphi-IDE geben, die mit DesignTime-Packages was anfangen könnten...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz