Подтвердить что ты не робот

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: система не может найти указанный файл.

Помимо обновления машины ничего не изменилось. Я потратил последние несколько дней на поиск в сети за то, что могло вызвать эту проблему.

Есть ли у кого-нибудь опыт в определении того, что могло быть причиной и по возможности, решением?

4b9b3361

Ответ 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 ошибок!!!