C#PrincipalContext未找到网络路径

时间:2014-07-31 13:51:38

标签: c# principalcontext

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

我遇到PrincipalContext

的问题
PrincipalContext ctx = new PrincipalContext(ContextType.Machine, machine, null, ContextOptions.Negotiate)

它适用于这种情况:

  • 本地机器
  • 本地虚拟机
  • 域名计算机到工作组计算机

然而,它在相反的方向上不起作用:

  • 虚拟机到本地主机
  • 工作组计算机到域计算机

我收到了这些错误:

  

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

     

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

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

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

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

我按照这里描述的步骤:
System.IO.FileNotFoundException: The network path was not found. Exception while using DirectoryEntry object on windows 7
在这里:
http://www.peppercrew.nl/index.php/2011/09/connect-to-remote-registry-fails-with-an-error-is-preventing-this-key-from-being-opened/

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

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

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>();