当前位置:  开发笔记 > 编程语言 > 正文

如何判断我的进程是否以管理员身份运行?

如何解决《如何判断我的进程是否以管理员身份运行?》经验,为你挑选了2个好方法。

我希望在以管理员身份运行进程时显示一些额外的UI元素,而不是在不运行时显示一些UI元素,类似于Visual Studio 2008在以管理员身份运行时在其标题栏中显示"管理员"的方式.我该怎么说?



1> casperOne..:

从技术上讲,如果你想看看如果成员是本地管理员帐户,那么你就可以得到安全标识符(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 WellKnownSidTypeBuiltinAdministratorsSid:

// 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);


这会检查当前用户是管理员还是进程以管理员身份运行?非管理员用户仍然可以通过右键单击该流程并选择"以管理员身份运行"来以管理员身份运行流程.
作为管理员并以管理员身份运行应用程序是两回事.即使我是管理员,我仍然可以在没有特权的情况下运行应用程序,这在我的情况下会导致我出现问题.

2> Kenn..:

我认为这是一个很好的简单机制.

using System.Security.Principal;

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

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有