c# - System.DirectoryServices.AccountManagement.PrincipalContext roto después de la actualización de Windows 10
filenotfoundexception (3)
He estado usando esta pequeña función sin problemas durante los últimos años para validar las credenciales del usuario. El método createPrincipalContext
devuelve un PrincipalContext
con ContextType.Machine
y el nombre de la máquina.
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;
}
Mi máquina de desarrollo se actualizó automáticamente a la última versión de Windows 10 recientemente, y desde entonces, principalContext.ValidateCredentials
ha lanzado la siguiente excepción.
System.IO.FileNotFoundException: el sistema no puede encontrar el archivo especificado.
Aparte de la actualización de la máquina, no se cambió nada más. Pasé los últimos días buscando en la red lo que pudo haber causado el problema.
¿Alguien tiene alguna experiencia en identificar lo que pudo haber sido la causa y, si es posible, una solución?
Intente cambiar el objetivo de su plataforma de compilación a "AnyCPU" , encontré que si mi objetivo de plataforma es x86, ¡tengo este problema!
¡Por qué, sin embargo, no tengo ni idea, parece que Win 10 bug !!!
Una Google final antes de que comenzara a retrotraer mi máquina a la versión anterior y encontré esto https://connect.microsoft.com/IE/feedback/details/1904887/windows-10-insider-preview-build-10565
el problema se debe a la falta de entradas de registro en HKEY_LOCAL_MACHINE / SOFTWARE / WOW6432Node / Microsoft / Windows NT / CurrentVersion, específicamente: RegisteredOwner y RegisteredOrganization
EDITAR : Ejecute el Editor del Registro presionando Windows R y escribiendo regedit.exe. Navegue a la ubicación de arriba
Simplemente haga clic con el botón derecho en CurrentVersion en el Editor del registro y seleccione Nuevo> Valor de cadena. Después de agregar cada entrada (RegisteredOwner y RegisteredOrganization), edite sus valores. Puede usar su nombre de usuario y compañía, respectivamente.
Desmarque la casilla de verificación Preferir de 32 bits en la ventana de propiedades de su proyecto en la pestaña Generar, está marcada de forma predeterminada - ver captura de pantalla. ¡Esto me lo arregló! Si marca la casilla nuevamente, las excepciones que describe volverán a aparecer. Supongo que esto obligará a que se ejecute en modo de 64 bits si es posible y, por lo tanto, utiliza la ruta de registro de 64 bits en lugar de la ruta de registro WOW6432Node y, por lo tanto, encontrará las claves correctas que necesita.