Мне нужно перезапустить само приложение АЛЬТЕРНАТИВНО от имени администратора и от имени администратора.
Проблема в том, что когда приложение находится в режиме повышенных прав, то перезапущенное приложение автоматически также перейдет в режим повышенных прав!
См. Этот пример:
var
ThisIsElevated: Boolean;
procedure TForm3.btnRestartClick(Sender: TObject);
begin
if ThisIsElevated then
ShellExecute(Handle, 'open', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL)
else
ShellExecute(Handle, 'runas', PChar(Application.ExeName), nil, nil, SW_SHOWNORMAL);
Close;
end;
procedure TForm3.CheckIsElevated;
const
TokenElevationType = 18;
TokenElevation = 20;
TokenElevationTypeDefault = 1;
TokenElevationTypeFull = 2;
TokenElevationTypeLimited = 3;
const
SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
const
SECURITY_BUILTIN_DOMAIN_RID = $00000020;
DOMAIN_ALIAS_RID_ADMINS = $00000220;
var
token: NativeUInt;
Elevation: DWord;
dwSize: Cardinal;
begin
if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, token) then
try
if GetTokenInformation(token, TTokenInformationClass(TokenElevation), @Elevation, SizeOf(Elevation), dwSize) then
begin
if Elevation = 0 then
begin
Self.Caption := 'NOT ELEVATED';
ThisIsElevated := False;
end
else
begin
Self.Caption := 'ELEVATED!';
ThisIsElevated := True;
end;
end
else
ShowMessage(SysErrorMessage(GetLastError));
finally
CloseHandle(token);
end
else
ShowMessage(SysErrorMessage(GetLastError));
end;
procedure TForm3.FormCreate(Sender: TObject);
begin
CheckIsElevated;
end;
Так как я могу перезапустить приложение в режиме без повышенных прав из приложения в режиме повышенных прав?