windows下需要管理员权限的程序启动时必须得到用户的权限。他们也可以通过右键单击EXE并选择“以管理员身份运行”来以管理员权限运行。但是,在 EXE 启动之前,会出现一个消息框。真的很恶心。
现在我希望我的应用程序以管理员身份运行,并且我不希望用户单击 EXE 文件时弹出消息框。
现在我想知道 AdjustTokenPrivileges 函数是否可以帮助我实现这一点。
任何人都可以帮助我吗?
windows下需要管理员权限的程序启动时必须得到用户的权限。他们也可以通过右键单击EXE并选择“以管理员身份运行”来以管理员权限运行。但是,在 EXE 启动之前,会出现一个消息框。真的很恶心。
现在我希望我的应用程序以管理员身份运行,并且我不希望用户单击 EXE 文件时弹出消息框。
现在我想知道 AdjustTokenPrivileges 函数是否可以帮助我实现这一点。
任何人都可以帮助我吗?
你对权利和特权感到困惑。至少从 Windows API 的角度来看,两者是完全不同的(尽管它们在很多时候被视为同义词,至少在处理“你可以在 Windows 上做什么”时)。
您真正需要的是提升权利的能力。如果系统的安全模型存在一些缺陷,您应该无法做到这一点。要获得管理权限,其目的是代码必须在管理帐户下运行——或者由用户最初以管理员身份登录,或者由他们在运行时输入凭据,如您所见。
特权(AdjustTokenPrivileges
实际上是操纵的)是您有权做的事情,但在没有专门启用该特权的情况下仍然不允许做这些事情。例如,假设您开始以管理员身份登录。这给了你调整系统时钟的权利——但是调整系统时钟是普通程序几乎没有理由做的事情,所以他们在你做之前增加了一个额外的步骤——你需要先启用SE_SYSTEMTIME
权限您可以使用该权利。
如果您使用无权更改系统时间的帐户登录,则根本无法更改。如果您登录的帐户可以更改它,则必须先启用该权限才能执行此操作。
底线:AdjustTokenPrivileges
不会完成你想做的事情。
实际上有一种方法,它允许您通过调用LogonUser
API 函数来更改线程的安全凭证。它将句柄返回到可以在ImpersonateLoggedOnUser
和CreateProcessAsUser
调用中使用的令牌。这种技术被称为非人格化。
但是,我认为您正在尝试实现不同的目标-在没有 UAC 用户通知的情况下运行具有提升的管理权限的进程。您可以在 msconfig 实用程序中完全禁用 UAC,这是一个非常糟糕的解决方案,或者让您的程序保持原样,因为坦率地说,用户有权知道您的程序何时以超级用户权限运行,并禁用它通知应该是他的决定。