【发布时间】:2018-02-02 20:36:45
【问题描述】:
我正在编写一个 Visual Basic .NET 桌面应用程序(目前使用 WinForms 和 .NET Framework 4.5.1)。
我需要应用检测当前windows用户是否具有系统Administrator角色,但不需要用户使用Run as administrator启动应用。
- 我在登录的 Windows 10 计算机上拥有
Administrator角色。
-
以下代码返回
machinename/ian将 CurrUser 调暗为 WindowsIdentity CurrUser = WindowsIdentity.GetCurrent() MsgBox(CurrUser.Name)
-
但是,当我测试我是否具有管理员角色时,结果是
False,除非我Run as administratorMsgBox(My.User.IsInRole(ApplicationServices.BuiltInRole.Administrator))
类似的问题已经在 SO 上被问过多次,但除非我使用 Run as Administrator 启动应用程序,否则解决方案(都与上述类似)返回 false。
动机
- 该应用程序将由安装它的计算机上的不同用户使用
- 我想对普通用户隐藏一组扩展选项,但让机器的“所有者”可以使用它们,我认为他们是具有管理员角色的用户
- 应用程序本身不需要以提升的权限执行 - 它不应该具有更改用户系统部分的能力。从信任的角度来看,我希望我的用户知道该应用并不危险,他们不需要
Run as administrator没有任何理由。
我正在寻找一种在 Windows 10 家庭版(我认为它没有目录服务和 Active Directory?)上也能正常工作的解决方案,最好该解决方案也能在 Windows 7 上工作。
【问题讨论】:
-
您将如何处理这些信息?在我看来,在你问的那一刻,答案或多或少是准确的,因为你需要通过 UAC 才能做任何管理员-y。
-
这里的相关问题有一个关于通过目录服务查找组成员身份的信息的答案,我希望它在绝对基础上而不是在当前执行的上下文中是准确的:stackoverflow.com/questions/52256/…
-
@Craig - 我已经用“动机”部分更新了我的问题(我为什么要这样做)。我将看看目录服务。理想情况下,该解决方案适用于 Windows 7 和 Vista 以及 Windows 10。
-
如果您不打算实际上强制 UAC 提示,那么这意味着这些设置/首选项实际上每个人都可以编辑,你'只是试图向非管理员隐藏(最直接的)这样做的方式。这反过来可能会给人们一种关于这些设置的错误安全感。我会认真质疑与实际上使用内置 Windows 控件保护设置相比是否值得这样做。
-
how-to-check-if-the-current-user-is-an-administrator-even-if-uac-is-on 似乎有一个 C# 版本,它假定如果看到拆分令牌,则用户是管理员。翻译成 VB.Net 应该不会太棘手。