delphi 想知道我的应用程序是否具有管理员权限?

siv3szwd  于 2023-02-22  发布在  其他
关注(0)|答案(3)|浏览(153)

对于 Delphi ,我想知道我的应用程序是否有管理员权限,有没有一个你可能知道的解决方案?
相关问题:
How to launch an application with admin rights?

dbf7pr2w

dbf7pr2w1#

只需尝试执行需要管理权限的操作:

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;
qkf9rpyu

qkf9rpyu2#

调用WinAPI函数GetTokenInformation,传递TokenElevationa C++ example here应该很容易转换。
请注意,成为管理员和被提升是不同的。

qaxu7uf2

qaxu7uf23#

至于知道你的程序是否有管理员权限,我没有代码,但这可能是一个想法。注意,我只是写了它,是未经测试的。
但是,如果您能够在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;

相关问题