У меня есть код, который работает в большинстве версий Windows, чтобы определить, работает ли текущий пользователь как администратор. Я видел проблемы, когда наши клиенты используют групповые политики, и это не работает. Теперь я обновил свою рабочую станцию до Windows 8, и код больше не работает. Вот код:Определить, является ли пользователь администратором Windows 8 с помощью C#
[DllImport("advapi32.dll")]
private static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
private const int Logon32LogonInteractive = 2;
private const int Logon32ProviderDefault = 0;
public void Run() {
var _token;
LogonUser(Username, Domain, Password, Logon32LogonInteractive, Logon32ProviderDefault, ref _token);
_windowsIdentity = new WindowsIdentity(_token);
WindowsPrincipal myPrincipal = new WindowsPrincipal(_windowsIdentity);
var isAdmin = myPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
}
В этом случае isAdmin является ложным, если оно должно быть правдой. Если кто-то знает правильный способ сделать эту проверку, которая будет работать во всех версиях окон, это было бы здорово. Еще лучше, если кто-то знает, как изменить этот код, чтобы он работал в домене с использованием групповых политик.
Я попытался скопировать соответствующий код из своего класса. Очевидно, это не скомпилируется, но если я пропустил что-то, дайте мне знать.
Спасибо!
Вы пытаетесь написать «один» решение не разумно, потому что его не представляется возможным, в основном потому, что даже между Vista, и 7 метода будет отличаться. Напишите решения, направленные на каждую операционную систему. –