-1

可能重复:
Delphi:在需要时提示 UAC 提升

我用 Delphi 7 for Windows 7 编写的应用程序需要管理员权限才能使用某些功能。如何从源代码将其提升为管理员?

我使用以下代码检查用户权限:

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;

如果应用程序以管理员身份启动,则返回 True;如果不是,则为 False。现在,如果结果为 False,我想自动将程序提升到管理员。

我尝试将清单提升到管理员,但如果我启动应用程序,然后我会看到一个 UAC 提示,如果我回答“否”,那么应用程序根本不会运行。

有没有机会求助?

我需要管理员权限才能访问物理驱动器。

编辑:

我还尝试从代码中仅为此应用程序(ParamStr(0))禁用UAC(在按下“为此应用程序禁用UAC”按钮后)。

4

2 回答 2

1

进程在启动时收到它们的令牌,然后无法更改它们。因此,如果您想要一个看起来提升其功能的某些子集的应用程序,那么该功能必须涉及一个新流程。你不能做的是提升现有流程。

于 2011-08-08T06:36:37.843 回答
1

如果您希望它具有管理员权限,那么您必须通过 UAC。除非 UAC 被禁用,否则您无法在不显示 UAC 提示的情况下提升为管理员。显然,您必须在 UAC 提示符上选择 YES 才能获得管理员权限。

于 2011-08-07T23:43:01.077 回答