System.DirectoryServices.AccountManagement.PrincipalContext, поврежденный после обновления Windows 10
Я использовал эту небольшую функцию без каких-либо проблем в течение последних нескольких лет для проверки учетных данных пользователя. Метод createPrincipalContext
возвращает PrincipalContext
с ContextType.Machine
и именем машины.
public static bool ValidateCredentials(string username, string password, string domain = null) {
try {
using (var principalContext = createPrincipalContext(username, domain)) {
username = GetLoginInfo(username).Username;
// validate the credentials
if (principalContext.ValidateCredentials(username, password)) {
//once valid check if account is enabled
using (UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, username)) {
return user.Enabled.GetValueOrDefault(false);
}
}
}
} catch (PrincipalOperationException e) {
traceError(e);
} catch (Exception e) {
traceError(e);
}
return false;
}
Моя машина разработки автоматически обновилась до последней версии Windows 10, и с тех пор principalContext.ValidateCredentials
выбрасывает следующее исключение.
System.IO.FileNotFoundException: система не может найти указанный файл.
Помимо обновления машины ничего не изменилось. Я потратил последние несколько дней на поиск в сети за то, что могло вызвать эту проблему.
Есть ли у кого-нибудь опыт в определении того, что могло быть причиной и по возможности, решением?
Ответы
Ответ 1
Один окончательный Google, прежде чем я начал откатывать свою машину к предыдущей сборке, и я нашел это
https://connect.microsoft.com/IE/feedback/details/1904887/windows-10-insider-preview-build-10565
проблема вызвана отсутствием записей реестра в HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion, в частности: RegisteredOwner и RegisteredOrganization
ИЗМЕНИТЬ:
Запустите редактор реестра, нажав Windows R и набрав regedit.exe. Перейдите к расположению выше
Просто щелкните правой кнопкой мыши на CurrentVersion в редакторе реестра и выберите "Создать" > "Значение строки". После добавления каждой записи (RegisteredOwner и RegisteredOrganization) измените их значения. Вы можете использовать свое имя пользователя и название компании, соответственно.
Ответ 2
Снимите флажок Предпочтительный 32-разрядный в окне свойств проекта на вкладке "Сборка", он по умолчанию установлен - см. снимок экрана. Это исправило это для меня! Проверка флажка снова приведет к появлению описанных выше исключений. Я предполагаю, что это заставит его работать в 64-битном режиме, если это возможно, и, следовательно, использовать 64-битный путь реестра, а не путь WOW6432Node, и, следовательно, он найдет нужные ему ключи.
Снимите флажок "Предпочитаете 32-разрядный" снимок экрана
Ответ 3
Попробуйте изменить целевую платформу платформы на платформу "AnyCPU" , я обнаружил, что если моя целевая платформа - x86, у меня есть эта проблема!
Почему, но понятия не имею, кажется, что вы выиграли 10 ошибок!!!