Почему WindowsPrincipal.IsInRole всегда возвращает false для группы «Администраторы»?

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

  •  26-10-2019
  •  | 
  •  

Вопрос

Моя локальная учетная запись пользователя находится в группе «Администраторы», и я хотел просто выяснить, как проект Windows Forms будет определять, нахожусь ли я в группе «Администраторы».Итак, я начал проект форм Windows и попробовал следующее:

[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());
}

Почему все вышеперечисленные проверки не работают?

Это было полезно?

Решение

пытаться

currentUser1.IsInRole(WindowsBuiltInRole.Administrator)

Видеть MSDN.

«В Windows Vista и более поздних версиях операционной системы Windows контроль учетных записей пользователей (UAC) определяет привилегии пользователя.[..] Код, выполняющий метод IsInRole, не отображает диалоговое окно «Согласие».Код возвращает false, если вы находитесь в роли стандартного пользователя, даже если вы находитесь в группе «Встроенные администраторы».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top