C# PrincipalContext No se encontró la ruta de red
-
22-12-2019 - |
Pregunta
Estoy intentando utilizar PrincipalContext para comprobar si existe un grupo de usuarios local en una computadora remota.
estoy teniendo problemas con PrincipalContext
:
PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate)
Funciona en tales escenarios:
- máquina local a local
- local a máquina virtual
- máquina de dominio a máquina de grupo de trabajo
Sin embargo, no funciona en dirección opuesta:
- máquina virtual al host local
- máquina del grupo de trabajo a máquina del dominio
Recibo estos errores:
Excepción no controlada:System.IO.FileNotFoundException:La ruta de red no se encontró.
Excepción no controlada:System.Runtime.InteropServices.COMException:La ruta de red no se encontró.
La primera excepción es para la máquina virtual y la segunda para la máquina del grupo de trabajo.
Todas las máquinas tienen un usuario con el mismo nombre y contraseña y el código se ejecutó desde ese usuario.
¿Cómo solucionar este problema?
Solución
Encontré la respuesta. Parece que DirectoryServices no funciona en Windows 7 o más nuevo remoto. Supongo que cuando una computadora está en un grupo de trabajo, entonces es local y podemos conectarnos y cuando está en un dominio, entonces es remoto.
Seguí los pasos descritos aquí:
System.io.FilenotFoundEception: La ruta de la red fue extraviado. Excepción al usar el objeto DirectoryEntry en Windows 7
Y aquí:
http://www.peppercrew.nl/index.php/2011/09/connect-to-remote-registry-fails-with-an-error-is-preventing- esta -CHEY-from-from-abre /
Enable File and Print sharing in the Firewall
Start the Remote Registry Service
Add remote user access to this registry entry: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg
Sin embargo, no puedo cambiar los servicios y la configuración de registro en los servidores de producción. Encontré tal manera de obtener el grupo:
var server = new DirectoryEntry(string.Format("WinNT://{0},Computer", machine));
DirectoryEntry group = server.Children.Cast<DirectoryEntry>().Where(
d => d.SchemaClassName.Equals("Group") && d.Name.Equals("Administrators")
).Single<DirectoryEntry>();