Det er vist mest overskueligt at bruge pseudokode.
Det går i alt sin enkelthed ud på at kunne skrive til HKEY_CLASSES_ROOT under Vista f.eks. sådan her, uden at få en fejlmeddelelsen "Failed to set data":
procedure TForm1.Button1Click(Sender: TObject);
var MyReg : TRegInifile;
begin
MyReg := TRegInifile.create('');
try
MyReg.RootKey := HKEY_CLASSES_ROOT;
if MyReg.ReadString('Test','Test','') <> 'ABCD' then
begin
// her skal der spørges om og gives rettigheder.
//Altså kun hvis nøglen ikke findes.
MyReg.WriteString('Test','Test','ABCD');
end;
finally
MyReg.free;
end;
end;
Det skal ske uden at programmet fra starten har spurgt om lov til at få administratorrettigheder ved hjælp af et manifest som dette:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="x86" />
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Læs evt. mere om brug af sådanne manifester her:
http://developersoven.blogspot.com/2007/02/leveraging-vistas-uac-with-delphi-part_27.html