一尘不染

在.NET / C#中测试进程是否具有管理特权

c#

有没有一种规范的方法可以测试该进程是否在计算机上具有管理特权?

我将开始一个长期运行的过程,并且在该过程的整个生命周期的更晚时期,它将尝试一些需要管理员权限的事情。

我希望能够预先测试该进程是否具有这些权利,而不是稍后进行测试。


阅读 233

收藏
2020-05-19

共1个答案

一尘不染

这将检查用户是否在本地Administrators组中(假设您不检查域管理员权限)

using System.Security.Principal;

public bool IsUserAdministrator()
{
    //bool value to hold our return value
    bool isAdmin;
    WindowsIdentity user = null;
    try
    {
        //get the currently logged in user
        user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    finally
    {
        if (user != null)
            user.Dispose();
    }
    return isAdmin;
}
2020-05-19