Aprende a verificar si tu aplicación C# tiene derechos de administrador o no.

En uno de nuestros artículos anteriores, aprendimos cómo forzar el inicio de una aplicación basada en WinForms C # con derechos de administrador. Esto es bastante útil cuando no nos importa el estado actual de nuestra aplicación cuando se ejecuta con o sin derechos de administrador. Sin embargo, cuando su aplicación necesita ejecutarse en ambas condiciones, debe verificar cuándo ejecutar algún fragmento de código de acuerdo con la condición. Esto se puede hacer fácilmente a través de la clase System.Security.Principal de Windows. 

El espacio de nombres System.Security.Principal define un objeto principal que representa el contexto de seguridad en el que se ejecuta su código. Cuando importa esta clase, puede acceder a la clase WindowsIdentity del espacio de nombres. Esta clase representa al usuario actual que ejecuta la aplicación.

Con este objeto, puede verificar si la identidad actual coincide con la pertenencia al grupo de Windows de un usuario de Windows, en este caso el rol de Administrador. Proporcione como primer argumento de una nueva instancia de la clase WindowsPrincipal . Desde este objeto, puede llamar al método IsInRole para verificar si es administrador o no:

using System.Security.Principal;

// Almacenar bandera booleana
bool isAdmin;

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

    // Si es administrador, la variable se actualiza de Falso a Verdadero
    isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
}

// Verifique con una simple condición si es administrador o no
if (isAdmin)
{
    MessageBox.Show("¡Tienes derechos de administrador!");
}
else
{
    MessageBox.Show("No tienes derechos de administrador :C!");
}

Con esta lógica simple, puede verificar fácilmente si el usuario actual es administrador o no. Vale la pena mencionar que esto funciona perfectamente en Windows y también en Mono, para entornos Linux.

Creando un método

Puede crear fácilmente un método en su clase para verificar en breve esta lógica:

using System.Security.Principal;

/// <summary>
/// Método booleano que verifica si el usuario actual tiene derechos de administrador.
/// </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;
}

Puedes usarlo con un condicional:

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

Que te diviertas ❤️!


Ingeniero de Software Senior en EPAM Anywhere. Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores