Donnerstag, 20. November 2008

entwickler.com Magazine Konferenzen Akademie Entwickler-Forum Jobbörse Bücher
Software & Support Verlag

Delphi 8 und die VCL.NET-Anwendung

Frage: Wie erstelle ich eine neue VCL-Formularanwendung ? Wenn ich nun F9 für Starten drücke, erhalte ich sofort die Exception System.Security.SecurityException. Und vor allem, warum ist diese EXE 1,3MByte groß?

Antwort:Wenn die Delphi 8-Anwendung mit der Unit SysUtils compiliert wird, benötigt die Anwendung die Full Trust-Berechtigung, damit die CLR die Assembly erfolgreich laden kann. Wird die Assembly direkt von der lokalen Festplatte gestartet, ist Full Trust in der Voreinstellung eingerichtet. Wird die Anwendung jedoch von einem Netzlaufwerk oder einem sonstigen Verzeichnis mit eingeschänkten .NET-Rechten aus gestartet, muss die CLR sofort dieses Veto einlegen, da die interne Implementierung der Unit SysUtils "nicht sicher" ist.

Zur Abhilfe muss man mit dem Tool .NET Framework Configuration die .NET-Rechte für diese Anwendung erhöhen. Das .NET-Framework ist sehr flexibel, wenn es darum geht, die von der neuen Sicherheitseinstellung betroffenen Assemblies zu definieren. Ich greife in der Regel entweder zur Einstellung
a) alle Assemblies, die mit meiner SNK-Datei signiert wurden, oder
b) alle Assemblies, die über einen bestimmten Aufruf-Pfad geladen wurden.
Das generelle "Aufbohren" der .NET-Rechte für die Intranet-Zone ist zwar bequem, aber letztendlich auch "gefährlich".

Wenn die VCL.NET-Anwendung mit der Einstellung Link Units=True compiliert wird, bindet der Linker alle VCL.NET-Module in diese Anwendung mit ein. Um die EXE-Datei drastisch abzuspecken, müssen alle benötigten VCL.NET-Assemblies dem eigenen Projekt als Verweis hinzugefügt werden, um dann für jede dieser Assemblies im Objekt Inspektor die Eigenschaft Link Units auf False zu setzen:

a) Borland.Delphi.dll
b) Borland.Vcl.dll
c) Borland.VclInterop.dll
d) Borland.VclRtl.dll
e) Borland.Vclx.dll

In diesem Fall werden die VCL.NET-Teile auf die externen Borland-Assemblies ausgelagert, so dass die Dateigröße auf 9 kByte schrumpft. Im Fall einer Windows Forms-Anwendung (FCL) anstelle der VCL.NET sind derartige Klimmzüge nicht notwendig.






Software & Support Verlag GmbH