C#PrincipalContext未找到网络路径

C#PrincipalContext未找到网络路径,c#,principalcontext,C#,Principalcontext,我正在尝试使用PrincipalContext检查远程计算机上是否存在本地用户组 我在PrincipalContext方面遇到问题: PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate) 它适用于以下情况: 本地对本地计算机 本地到虚拟机 域计算机到工作组计算机 但是,它不会朝相反的方向工作: 虚拟机到本地主机 工作组计算机到域计算

我正在尝试使用PrincipalContext检查远程计算机上是否存在本地用户组

我在
PrincipalContext
方面遇到问题:

PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate)
它适用于以下情况:

  • 本地对本地计算机
  • 本地到虚拟机
  • 域计算机到工作组计算机
但是,它不会朝相反的方向工作:

  • 虚拟机到本地主机
  • 工作组计算机到域计算机
我发现以下错误:

未处理的异常:System.IO.FileNotFoundException:未找到网络路径

未处理的异常:System.Runtime.InteropServices.COMException:未找到网络路径

第一个例外是虚拟机,第二个例外是工作组机器

所有计算机都有具有相同名称和密码的用户,并且代码是从该用户执行的


如何解决这个问题?

我找到了答案。DirectoryServices似乎无法在远程Windows 7或更高版本上运行。 我猜当一台计算机在一个工作组中时,它是本地的,我们可以连接;当它在一个域中时,它是远程的

我遵循了这里描述的步骤:

这里:

在防火墙中启用文件和打印共享
启动远程注册表服务
将远程用户访问添加到此注册表项:HKEY\U LOCAL\U MACHINE\SYSTEM\CurrentControlSet\Control\SecurePipeServers\winreg

但是,我无法更改生产服务器上的服务和注册表设置。我找到了这样的方法来获得团体:

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>();
var server=newdirectoryEntry(string.Format(“WinNT://{0},Computer”,machine));
DirectoryEntry组=server.Children.Cast()。其中(
d=>d.SchemaClassName.Equals(“组”)和&d.Name.Equals(“管理员”)
).Single();