Weil SHELLEXECUTE keine Rechte erbt, gibt es RUNASADMIN mit SHELLEXECUTEEX:
Das damit gestartete Programm hat dann die mitgegebenen Rechte.
Delphi-Quellcode:
// RunAsAdmin(Handle, ExtractFilepath (Application.ExeName) + 'FileAccessCopy.exe', strParams);
procedure RunAsAdmin(hWnd: HWND; aFile:
string; aParameters:
string);
var sei: TShellExecuteInfo;
begin
FillChar(sei, SizeOf(sei), 0);
sei.cbSize := sizeof(sei);
sei.Wnd := hWnd;
sei.fMask := SEE_MASK_FLAG_DDEWAIT
or SEE_MASK_FLAG_NO_UI;
sei.lpVerb := '
runas';
sei.lpFile := PChar(aFile);
sei.lpParameters := PChar(aParameters);
sei.nShow := SW_HIDE;
// SW_SHOWNORMAL; SW_HIDE;
if not ShellExecuteEx(@sei)
then RaiseLastOSError;
end;