如何检测我的进程是否正在运行 UAC 提升的进程?
我的 Vista 应用程序需要知道用户是否以“管理员”身份(提升权限)或标准用户(非提升权限)启动它。 我如何在运行时检测到这一点?
My Vista application needs to know whether the user has launched it "as administrator" (elevated) or as a standard user (non-elevated). How can I detect that at run time?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
对于我们这些使用 C# 工作的人来说,在 Windows SDK 中,有一个“UACDemo”应用程序作为“跨技术示例”的一部分。 他们使用这种方法查找当前用户是否是管理员:(
注意:我将原始代码重构为属性,而不是“if”语句)
For those of us working in C#, in the Windows SDK there is a "UACDemo" application as a part of the "Cross Technology Samples". They find if the current user is an administrator using this method:
(Note: I refactored the original code to be a property, rather than an "if" statement)
下面的 C++ 函数可以做到这一点:
The following C++ function can do that:
我不认为海拔类型是您想要的答案。 您只是想知道它是否升高。 调用 GetTokenInformation 时,使用 TokenElevation 而不是 TokenElevationType。 如果该结构返回正值,则用户是管理员。 如果为零,则用户处于正常海拔。
这是德尔福的解决方案:
I do not think elevation type is the answer you want. You just want to know if it is elevated. Use TokenElevation instead of TokenElevationType when you call GetTokenInformation. If the structure returns a positive value, the user is admin. If zero, the user is normal elevation.
Here is a Delphi solution:
这是一个 VB6 实现,用于检查(当前)进程是否已提升
Here is a VB6 implementation of a check if a (current) process is elevated