¿Por qué WindowsPrincipal.isinrole siempre devuelve falso para el grupo de "administradores"?

StackOverflow https://stackoverflow.com/questions/9310143

  •  26-10-2019
  •  | 
  •  

Pregunta

Mi cuenta de usuario local está en el grupo de administradores, y simplemente quería descubrir cómo un proyecto de formularios de Windows determinaría si estoy en el grupo de administradores. Entonces, comencé un proyecto de formularios de Windows y probé lo siguiente:

[STAThread]
static void Main()
{
    string adminGroup1 = @"BUILTIN\Administrators";
    string adminGroup2 = Environment.MachineName + @"\Administrators";
    string adminGroup3 = Environment.MachineName.ToLower() + @"\Administrators";
    string adminGroup4 = "Administrators";
    string adminGroup5 = "administrators";

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
    WindowsPrincipal currentUser1 = (WindowsPrincipal)Thread.CurrentPrincipal;
    bool IsAdmin1_1 = currentUser1.IsInRole(adminGroup1); // false
    bool IsAdmin1_2 = currentUser1.IsInRole(adminGroup2); // false
    bool IsAdmin1_3 = currentUser1.IsInRole(adminGroup3); // false
    bool IsAdmin1_4 = currentUser1.IsInRole(adminGroup4); // false
    bool IsAdmin1_5 = currentUser1.IsInRole(adminGroup5); // false

    WindowsPrincipal currentUser2 = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    bool IsAdmin2_1 = currentUser2.IsInRole(adminGroup1); // false
    bool IsAdmin2_2 = currentUser2.IsInRole(adminGroup2); // false
    bool IsAdmin2_3 = currentUser2.IsInRole(adminGroup3); // false
    bool IsAdmin2_4 = currentUser1.IsInRole(adminGroup4); // false
    bool IsAdmin2_5 = currentUser2.IsInRole(adminGroup5); // false

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new Form1());
}

¿Por qué fallan todas las comprobaciones anteriores?

¿Fue útil?

Solución

probar

currentUser1.IsInRole(WindowsBuiltInRole.Administrator)

Ver MSDN.

"En Windows Vista y versiones posteriores del sistema operativo Windows, el control de la cuenta de usuario (UAC) determina los privilegios de un usuario. [..] El código que ejecuta el método iSInrole no muestra el cuadro de diálogo de consentimiento. El código devuelve falso si Usted está en el rol de usuario estándar, incluso si se encuentra en el grupo de administradores incorporados "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top