Below code can run dos commands in administrator permission. It works like ShellExecute, but works in administrator permission.
function RunAsAdminAndWaitForCompletion(hWnd: HWND; filename: string; Parameters: string): Boolean; { See Step 3: Redesign for UAC Compatibility (UAC) http://msdn.microsoft.com/en-us/library/bb756922.aspx } var sei: TShellExecuteInfo; ExitCode: DWORD; begin ZeroMemory(@sei, SizeOf(sei)); sei.cbSize := SizeOf(TShellExecuteInfo); sei.Wnd := hwnd; sei.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI or SEE_MASK_NOCLOSEPROCESS; if MainFrm.m_cbRunAsAdmin.Checked then sei.lpVerb := PChar('runas'); sei.lpFile := PChar(Filename); // PAnsiChar; if parameters <> '' then sei.lpParameters := PChar(parameters); // PAnsiChar; sei.nShow := SW_SHOWNORMAL; //Integer; if ShellExecuteEx(@sei) then begin repeat Application.ProcessMessages; GetExitCodeProcess(sei.hProcess, ExitCode) ; until (ExitCode <> STILL_ACTIVE) or Application.Terminated; end; end;