答案 0 :(得分:9)
只是尝试做一些需要管理权限的事情:
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;
答案 1 :(得分:4)
您通过GetTokenInformation调用WinAPI函数TokenElevation。 a C++ example here应该很容易转换。
请注意,作为管理员并被提升是不同的。
答案 2 :(得分:-2)
至于知道你的程序是否具有管理员权限,我没有代码,但这可能是一个想法。请注意,我刚刚编写它并且未经测试。
但我们的想法是,如果您能够在program files
文件夹中创建文件,那么您可能拥有管理员权限。
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;