如何在C#中检查是否以本地管理员身份运行

5

可能是重复问题:
如何判断我的进程是否以管理员身份运行?

使用C#如何检查我的进程是否以本地管理员身份运行?

我知道如何找出当前用户是否是内置管理员组的成员。但这不是我想知道的。我想知道的是当前用户是否为(唯一的)特殊本地管理员帐户。

我也知道如何检索当前用户的名称,但我不想将其与硬编码的名称“Administrator”进行比较,因为这在本地化版本的Windows中不起作用(例如西班牙语中的“Administrador”,法语中的“Administrateur”等)。


1
本地管理员帐户并不是“特殊”或受保护的,它只是存在于本地管理员组中的默认用户。您可以像删除其他任何用户一样删除和重命名它(当您删除所有本地管理员用户时会有一些有趣的时刻)。 - Dai
如果这个方法不起作用,尝试在以下问题的答案中使用两个代码:https://dev59.com/ZnM_5IYBdhLWcg3wzmkw - Tearsdontfalls
@David,我记得POSIX子系统以类似于UNIX系统上的root的方式特殊处理管理员帐户。这可能是一个不相关的边缘情况,但我曾经有很多Interix安装说明告诉我要确保我是“真正”的管理员,而不仅仅是在组中。 - dsolimano
感谢您指出重复问题。我已经尝试了类似以下代码:var securityIdentifier = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); var ntAccount = securityIdentifier.Translate(typeof(NTAccount)); var name = ntAccount.Value;但是这会返回“Administrators”(复数形式),而不是“Administrator”(单数形式)。WellKnownSidType.BuiltinAdministratorsSid 返回的 SID 到底是什么?是 Administrators 组的还是本地 Administrator 的? - candritzky
如果您提到一个不相关的边缘情况,那么您是完全正确的。我正在尝试解决与某些第三方软件进行接口时遇到的非常愚蠢的问题,他们在某种程度上硬编码了对管理员帐户名称的检查。我认为,他们真正想要的只是确保成为管理员组的成员,但这不是他们实现的方式。 - candritzky
显示剩余2条评论
1个回答

1

这是我使用的方式

    WindowsIdentity user = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(user);
    bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接