如果以本地管理员身份运行,如何签入C#

如果以本地管理员身份运行,如何签入C#,c#,windows-identity,C#,Windows Identity,可能重复: 如果我的进程以本地管理员身份运行,如何使用C#进行检查 我知道如何确定当前用户是否是内置Administrators组的成员。但这不是我想知道的。我想知道当前用户是否是(唯一)特殊的本地管理员帐户 我也知道如何检索当前用户的名称,但我不想将其与硬编码的名称“管理员”进行比较,因为这不适用于本地化版本的Windows(例如西班牙语的“Administrator”或法语的“Administrator”等)。这是我使用的方式 WindowsIdentity user = Wind

可能重复:

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

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

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

这是我使用的方式

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

本地管理员帐户不是“特殊”或受保护的,它只是本地管理员组中存在的默认用户。您可以像删除任何其他用户一样删除和重命名它(顺便说一句,删除所有本地管理员用户时会很有趣)。如果这不起作用,请在回答此问题时尝试两种代码:@David,我似乎记得POSIX子系统以类似于UNIX系统上root的方式专门处理管理员帐户。可能是一个无关紧要的edge案例,但我有很多Interix安装说明告诉我,要确保我是“真正的”管理员,而不仅仅是组中的管理员。感谢您为我指出了副本。Alread尝试了链接此var securityIdentifier=新securityIdentifier(WellKnownSidType.builtinadAdministratorsId,null)的内容;var ntAccount=securityIdentifier.Translate(typeof(ntAccount));变量名称=ntAccount.Value;但它返回“Administrators”(复数)而不是“Administrator”(单数)。WellKnownSidType.BuiltinadAdministratorsSID返回的确切SID是什么?管理员组中的一个,还是本地管理员的一个?@dsolimano如果你提到一个不相关的边缘案例,那你完全正确。我试图解决一个非常愚蠢的问题,与一些第三方软件接口,他们不知何故硬编码了一个检查管理员帐户名的代码。我认为,他们真正想要的只是确保成为Administrators组的成员,但这不是他们实现它的方式。