Здравствуйте, VladD2, Вы писали
VD>Но есть еще задача проверить, что текущий юзер является админом. И тут тоже вылезает проблема с тое о чем ты написал выше. Вот такой код:
VD>VD> using var windowsIdentity = WindowsIdentity.GetCurrent();
VD> var windowsPrincipal = new WindowsPrincipal(windowsIdentity);
VD> var isAdmin = windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
VD> Console.WriteLine($"You are is {(isAdmin ? "" : "not ")}administrator.");
VD>
VD>Отлично работе из консоли открытой в режиме администратора, но при обычном запуске не позволяет понять является ли юезер админом.
VD>Как узнать, что текущий пользователь админ (т.е. что текущий токен можно элевировать до админа)?
Если юзер входит в группу администраторов, то для него создается 2 токена. Один админовский , другой юзеровский. Первый используется при запуске программ с правами админа, второй — без этих прав. Никакой элевации токенов не существует как понятия.
WindowsIdentity.GetCurrent() возвращает текущий токен.
Поэтому если нужно узнать, является ли юзер админом из программы, запущенной без прав админа, то можно, конечно, сделать в ней logonUser с админовским входом как в прошлый раз
Либо посмотри тут
https://stackoverflow.com/questions/3600322/check-if-the-current-user-is-administrator
IsCurrentUserAdmin
или
IsCurrentUserInAdminGroup