for delphi 我想知道我的应用程序是否具有管理权限,是否有解决方案,您可能知道这一点?想要了解我的应用程序是否具有管理权限?
相关的问题:
How to launch an application with admin rights?
for delphi 我想知道我的应用程序是否具有管理权限,是否有解决方案,您可能知道这一点?想要了解我的应用程序是否具有管理权限?
相关的问题:
How to launch an application with admin rights?
只是试图做一些事情,需要管理员权限:
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;
的
我可以问一下这个程序的确切程度吗?有什么办法可以给出假阳性或假结果?只是想知道是否有什么。 – 2014-02-16 05:42:50
它应该是相当可靠的。 GENERIC_WRITE包含SC_MANAGER_CREATE_SERVICE。而且您需要管理权限才能创建服务。 – davea 2014-02-17 20:05:30
感谢您的评论。如何一次使用'GENERIC_READ'或'GENERIC_WRITE'或'GENERIC_EXECUTE'?它不应该溢出边界吗? – 2014-02-18 05:28:42
至于明知羯羊或不是你的程序有管理员权限,我有没有代码,但是这可能是一个想法。请注意,我只写了它,未经测试。
但这个想法是,如果你能够在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;
为什么不通过覆盖随机分区表来探测当前权限? – 2010-07-21 16:05:47
这只会测试您是否可以写入'程序文件'目录,并且如果目录的安全设置已相应更改,则会失败......并且由于代码中存在错误(结果: =终于真“)。 ;) – 2010-07-21 16:15:14
这会以很多方式失败。在许多版本的本地化窗口上C:\ Program Files并不总是使用该名称。您永远不应该将系统路径硬编码到您的代码中。使用API。 – 2010-07-21 16:33:48
您调用WinAPI的功能GetTokenInformation,传递TokenElevation。有a C++ example here这应该很容易转换。
请注意,作为管理员和被提升是不同的。
可能重复[我如何检查,如果用户在Win32中具有本地管理员权限(http://stackoverflow.com/questions/581204/how-do-i-check-if-a-user-has-local-admin-privileges-in-win32) – 2010-07-21 17:49:26