uses
WinSvc;
function IsAdmin(Host : string = '') : Boolean;
var
H: SC_HANDLE;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then
Result := True
else begin
H := OpenSCManager(PChar(Host), nil, SC_MANAGER_ALL_ACCESS);
Result := H <> 0;
if Result then
CloseServiceHandle(H);
end;
end;
function IsRunningWithAdminPrivs: Boolean;
begin
var
List: TStringList;
begin
List := TStringList.Create;
try
try
List.Text := 'Sample';
// Use SHGetFolder path to retreive the program files folder
// here is hardcoded for the sake of the example
List.SaveToFile('C:\program files\test.txt');
Result := True;
except
Result := False;
end;
finally
List.Free;
DeleteFile('C:\program files\test.txt');
end;
end;
3条答案
按热度按时间dbf7pr2w1#
只需尝试执行需要管理权限的操作:
qkf9rpyu2#
调用WinAPI函数GetTokenInformation,传递TokenElevation。a C++ example here应该很容易转换。
请注意,成为管理员和被提升是不同的。
qaxu7uf23#
至于知道你的程序是否有管理员权限,我没有代码,但这可能是一个想法。注意,我只是写了它,是未经测试的。
但是,如果您能够在
program files
文件夹中创建一个文件,那么您可能具有管理员权限。