Ich mache das so (funktioniert auch mit älteren Delphi Versionen wie z.B. Delphi 6):
Schritt 1
Modifizieren des Projektquelltextes
Delphi-Quellcode:
program ProgrammXYZ;
{$R 'StartAsInvoker.res' 'StartAsInvoker.rc'}
uses
Forms,....
Schritt 2
Die Datei "StartAsInvoker.rc" erstellen. Diese Datei enthält lediglich einen Verweis auf das Manifest
1 24 "StartAsInvoker.manifest"
Schritt 3
Die eigentliche Manifestdatei erstellen (Name wie oben angegeben "StartAsInvoker.manifest")
Delphi-Quellcode:
<assembly xmlns="urn:schemas-microsoft-
com:
asm.v1" manifestVersion="1.0">
<assemblyIdentity
type="
win32"
name="ProgrammXYZ"
version="1.2.3"
processorArchitecture="*"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="
win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-
com:
asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Bei neueren Delphiversionen muss dann natürlich der Schalter "Laufzeitthemes verwenden" aus sein, sonst hat man zwei Manifeste in seiner exe. Der Vorteil dieser Variante: Man kann für jedes Programm eine individuelle Manifestdatei anlegen und auch der Privileglevel kann festgelegt werden.