我希望在以管理员身份运行进程时显示一些额外的UI元素,而不是在不运行时显示一些UI元素,类似于Visual Studio 2008在以管理员身份运行时在其标题栏中显示"管理员"的方式.我该怎么说?
从技术上讲,如果你想看看如果成员是本地管理员帐户,那么你就可以得到安全标识符(SID)通过当前用户的User
财产上的WindowsIdentity
类,像这样(静态GetCurrent
方法获取当前Windows用户):
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent(); string sid = windowsIdentity.User.ToString();
该User
属性返回用户的SID,该SID 具有针对各种组和用户的多个预定义值.
然后,您将检查SID是否具有以下模式,表明它是本地管理员帐户(这是一个众所周知的SID):
S-1-5- {其他SID部件} -500
或者,如果您不想解析字符串,则可以使用SecurityIdentifier
该类:
// Get the built-in administrator account. var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); // Compare to the current user. bool isBuiltInAdmin = (windowsIdentity.User == sid);
但是,我怀疑您真正想知道的是当前用户是否是本地计算机的管理员组的成员.您可以使用得到这个SID WellKnownSidType
的BuiltinAdministratorsSid
:
// Get the SID of the admin group on the local machine. var localAdminGroupSid = new SecurityIdentifier( WellKnownSidType.BuiltinAdministratorsSid, null);
然后,您可以检查用户的Groups
属性,WindowsIdentity
以查看该用户是否是本地管理员组的成员,如下所示:
bool isLocalAdmin = windowsIdentity.Groups. Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))). Any(s => s == localAdminGroupSid);
我认为这是一个很好的简单机制.
using System.Security.Principal; WindowsIdentity identity = WindowsIdentity.GetCurrent(); WindowsPrincipal principal = new WindowsPrincipal(identity); bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);