【问题标题】:Delphi Administrator rights D7 W7 [duplicate]Delphi管理员权限D7 W7 [重复]
【发布时间】:2011-10-22 02:47:42
【问题描述】:

可能重复:
Delphi: Prompt for UAC elevation when needed

我用 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 提示,如果我回答“否”,那么应用程序将根本不会运行。

有没有帮助的机会?

我需要管理员权限才能对物理驱动器进行原始访问。

编辑:

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

【问题讨论】:

  • 那么只有拥有管理权限的用户才能使用你的应用程序?我与我的用户群一起使用它的应用程序来避免像瘟疫一样。关于 UAC 的附加说明,如果用户无法通过 UAC 提示进行提升,则提示必须向他们展示使用备用用户名和密码进行提升的能力。这不是您在问题中考虑的问题。
  • > "所以只有拥有管理权限的用户才能使用您的应用程序?"不,我只会通知用户一些危险的功能
  • @wcale - 如果您的程序可以绕过 UAC 并让自己在管理员范围内运行,那么 UAC 将毫无意义,不是吗?
  • @techie007 - 是的,但是您必须在此应用程序(加密应用程序)或密钥中输入密码,然后启用隐藏驱动器...如果应用程序重新启动,则用户必须再次输入所有这些。我可以禁用整个系统的 UAC 检查,但我不想这样做。

标签: windows security administrator uac delphi


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 此应用程序以标准权限启动和工作,无需管理员。按“显示/编辑物理驱动器”按钮后,应用程序检查其是否以管理员身份运行。如果没有,则更改为管理员并发出 UAC 警告。如何从代码提升到管理员? UAC 可能会显示警告。
    • 你的这个应用程序,它有什么作用?这听起来像是一个有趣的应用程序,当然它不仅仅是一个标准的业务应用程序。它是某种磁盘实用程序吗?
    • @Marthinus 这是密码学应用程序
    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2011-01-06
    • 2015-03-03
    • 1970-01-01
    相关资源
    最近更新 更多