可能重复:
Delphi:需要时提示UAC提升
我用Delphi 7编写的用于Windows 7的应用程序需要pipe理员权限来执行某些function。 我怎样才能从源代码提升到pipe理员?
我用这个代码检查用户权限:
function IsUserAdmin : boolean; const CAdminSia : TSidIdentifierAuthority = (value: (0, 0, 0, 0, 0, 5)); var sid : PSid; ctm : function (token: dword; sid: pointer; var isMember: bool) : bool; stdcall; b1 : bool; begin result := false; ctm := GetProcAddress(LoadLibrary('advapi32.dll'), 'CheckTokenMembership'); if (@ctm <> nil) and AllocateAndInitializeSid(CAdminSia, 2, $20, $220, 0, 0, 0, 0, 0, 0, sid) then begin result := ctm(0, sid, b1) and b1; FreeSid(sid); end; end;
如果应用程序以pipe理员身份启动,则返回True; 如果不是,那么就是假的。 现在,如果我有False结果我想自动提升程序到pipe理员。
我尝试用manifest升级到pipe理员,但如果我启动应用程序,然后我看到一个UAC提示,如果我回答“否”,那么应用程序将不会运行。
任何机会的帮助?
我需要pipe理员权限才能访问物理驱动器。
编辑:
我也尝试从代码中禁用UAC(ParamStr(0))(在按下“Disable UAC for this application”button之后)。
进程在启动时收到它们的令牌,然后不能更改它们。 因此,如果你想要一个应用程序似乎提升其功能的一部分,该功能必须涉及一个新的过程。 你不能做的是提升现有的流程。
如果你想要它有管理员权限,那么你必须通过UAC。 除非禁用了UAC,否则不能提示管理员不显示UAC提示。 显然,你必须在UAC提示符上选择YES才能给予管理员权限。