Entschuldige, ich hab Dein Problen glaube ich etwas falsch wahrgenommen.
Registry-Rechte aufweichen im Installer ist irgendwie sehr unschön.
Ging es nur darum, das Icon zu setzen, während das Programm non-elevated läuft?
ShellExecute(Application.MainForm.Handle, 'runas', PChar(ParamStr(0)), PChar(ADrive), nil, SW_HIDE);
Delphi-Quellcode:
program blub;
...
begin
if FindCmdLineSwitch('seticon') then begin
// set icon for ParamStr(2) in registry
Exit;
end;
Application.Initialize ...
Besser als sich selbst mit Parametern aufzurufen wäre natürlich eine Mini-Konsolen-Exe ohne alles, nur mit dieser Funktion, um die Elevation so klein wie möglich zu halten.
Das wäre auf jeden Fall "korrekteres" Vorgehen, denn:
* Programme sollte non-elevated laufen können (siehe auch MS-Vorgaben für Compatible with Windows &c)
* Elevaten nur für einzelne Aktionen ist immer sicherer als Programme ganz elevated laufen zu lassen
* Programme sollten keine Rechte aufweichen wo nicht unbedingt nötig (siehe
AV-Heuristiken)
Ja, dann fragt das Programm jedesmal nach Admin-Rechten, wenn eine Verknüpfung erstellt wird. Würde es, wenn das Programm selber elevated läuft, ja auch, und entspricht dem, was passiert.