web-dev-qa-db-fra.com

System.DirectoryServices.AccountManagement.PrincipalContext cassé après la mise à jour de Windows 10

J'utilise cette petite fonction sans aucun problème depuis quelques années pour valider les informations d'identification de l'utilisateur. La méthode createPrincipalContext renvoie un PrincipalContext avec ContextType.Machine et le nom de la 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;
}

Ma machine de développement a été mise à jour automatiquement vers la dernière version de Windows 10 récemment et depuis lors, principalContext.ValidateCredentials a levé l'exception suivante.

System.IO.FileNotFoundException: le système ne peut pas trouver le fichier spécifié.

À part la mise à jour de la machine, rien d'autre n'a été changé. J'ai passé les derniers jours à chercher sur le net ce qui pourrait avoir causé le problème.

Quelqu'un a-t-il une expérience dans l'identification de la cause possible et, si possible, d'une solution?

33
Nkosi

Un dernier Google avant de commencer à restaurer ma machine à la version précédente et je l'ai trouvé https://connect.Microsoft.com/IE/feedback/details/1904887/windows-10-insider-preview-build- 10565

le problème est dû à des entrées de registre manquantes dans HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion, en particulier: RegisteredOwner et RegisteredOrganization

[~ # ~] éditez [~ # ~] : Exécutez l'Éditeur du Registre en appuyant sur Windows R et en tapant regedit.exe. Accédez à l'emplacement ci-dessus

Faites un clic droit sur CurrentVersion dans l'Éditeur du Registre et sélectionnez Nouveau> Valeur de chaîne. Après avoir ajouté chaque entrée (RegisteredOwner et RegisteredOrganization), modifiez leurs valeurs. Vous pouvez utiliser respectivement votre nom d'utilisateur et le nom de l'entreprise.

49
Doogal

Décochez la case Préférer 32 bits dans la fenêtre des propriétés de votre projet sous le Onglet Build, il est coché par défaut - voir capture d'écran. Cela l'a corrigé pour moi! Si vous cochez à nouveau la case, les exceptions que vous décrivez réapparaîtront. Je suppose que cela le forcera à fonctionner en mode 64 bits si possible, et donc utiliser le chemin de registre 64 bits plutôt que le chemin de registre WOW6432Node et donc il trouvera les clés correctes dont il a besoin.

Décochez la capture d'écran "Préférer 32 bits"

14
Kris

Essayez de changer votre construire la cible de plate-forme en "AnyCPU", j'ai trouvé que si ma cible de plate-forme est x86, j'ai ce problème!

Pourquoi, mais sans idée, semble gagner un bug de 10 !!!

2
Joseph