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