个性化阅读
专注于IT技术分析

如何确定你的WinForms C#应用程序是否具有管理员权限

在上一篇文章中, 我们了解了如何使用管理员权限强制启动基于WinForms C#的应用程序。当我们不关心应用程序的当前状态(无论有无管理员权限)时, 此功能非常有用。但是, 当你的应用程序需要同时在两种情况下运行时, 你应该根据情况检查何时运行某些代码。通过Windows的System.Security.Principal类可以轻松完成此操作。

System.Security.Principal命名空间定义了一个主体对象, 该主体对象表示在其下运行代码的安全上下文。导入此类时, 可以访问名称空间的WindowsIdentity类。此类表示运行应用程序的当前用户。

使用此对象, 你可以检查当前身份是否与Windows用户的Windows组成员身份(在本例中为Administrator角色)匹配。提供WindowsPrincipal类的新实例的第一个参数。从此对象, 可以调用IsInRole方法来验证是否为管理员:

using System.Security.Principal;

// Store boolean flag
bool isAdmin;

using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
{
    WindowsPrincipal principal = new WindowsPrincipal(identity);

    // If is administrator, the variable updates from False to True
    isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}

// Check with a simple condition whether you are admin or not
if (isAdmin)
{
    MessageBox.Show("You have administrator rights !");
}
else
{
    MessageBox.Show("You don't have administrator rights :C !");
}

通过这种简单的逻辑, 你可以轻松地检查当前用户是否为管理员。值得一提的是, 对于Linux环境, 这在Windows和Mono中也能完美运行。

建立方法

你可以轻松地在你的类中创建一个方法来很快验证以下逻辑:

using System.Security.Principal;

/// <summary>
/// Boolean method that verifies if the current user has administrator rights.
/// </summary>
/// <returns></returns>
public bool IsAdministrator()
{
    bool isAdmin;

    using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
    {
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }

    return isAdmin;
}

你可以在有条件的情况下使用它:

if (this.IsAdministrator())
{
    MessageBox.Show("You have administrator rights !");
}
else
{
    MessageBox.Show("You don't have administrator rights :C !");
}

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何确定你的WinForms C#应用程序是否具有管理员权限

评论 抢沙发

评论前必须登录!