Adding manifest for admin rights request
I already commented that "Writing program settings to the registry is not a proper cause to give your application admin privileges". However it is a good idea to include a UAC manifest in any case. the common requestedExecutionLevel
should be level="asInvoker"
. see the docs
"Q: Adding manifest for admin rights request for delphi 7"
Create the below 4 files (2 sets):
(UAC Only)
uac.manifest
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MyApp" type="win32"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
uac.rc
1 24 "uac.manifest"
(UAC + XP Themes)
uac_xp.manifest
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="MyApp" version="1.0.0.0" processorArchitecture="x86"/>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="*"/>
</dependentAssembly>
</dependency>
<!-- Windows Vista application security requirements. -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--Windows 7-->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!--Windows Vista-->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
</application>
</compatibility>
</assembly>
uac_xp.rc
1 24 "uac_xp.manifest"
Add the desired rc
file (uac.rc
or uac_xp.rc
) to your project via the "Project > Add to project" menu item. This will create the {$R}
directive in your project file:
program Project1;
{.$R 'uac.res' 'uac.rc'} // UAC only
// OR
{$R 'uac_xp.res' 'uac_xp.rc'} // UAC + XP Themes
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Note the {$R 'uac_xp.res' 'uac_xp.rc'}
. Delphi will auto compile the rc
to res
file.
Alternatively you can compile the rc
file via brcc32 uac.rc
outside Delphi IDE. and then add {$R 'uac_xp.res'}
manually to your project.
Make sure you don't use any other XP manifest.
How to remove the "internal" manifest from Delphi 7 project ?
That internal manifest was in Delphi 7 times represented by the TXPManifest
component, whose only purpose was to add the XPMan.pas
unit to the uses clause of a form's unit where it was dropped. This XPMan.pas
unit then included the resource file with the manifest itself into a project output.
So, to remove this internal manifest, you need to remove all TXPManifest
components from all of the forms of your project (if you used them), as well as all the XPMan
uses clause references from all units of your project.
In short, do the following two steps for all units of your project (the first step is optional if you didn't used the TXPManifest
components, but the second):