我编写了一个非常示例的测试程序,并将其作为域计算机中的本地系统帐户运行。代码如下:
static void Main(string[] args)
{
try
{
System.Console.Out.WriteLine("Test Start");
List<string> temp = new List<string>();
temp.Add(Environment.UserDomainName);
temp.Add("test");
temp.Add("test.com");
temp.Add("dc.test.com");
temp.Add("gc.test.com");
foreach (var i in temp)
{
using (HostingEnvironment.Impersonate())
{
System.Console.WriteLine("LDAP://{0}", i);
DirectoryEntry entry = new DirectoryEntry("LDAP://" + i);
try
{
entry.RefreshCache();
string nativeGuid = entry.NativeGuid;
string path = entry.Path;
string server = entry.Options.GetCurrentServerName();
System.Console.WriteLine("{0} success!", i);
}
catch (Exception e)
{
System.Console.WriteLine("{0}\n {1}", i, e);
}
}
}
System.Console.Out.WriteLine("Test End");
}
catch (Exception e)
{
System.Console.Out.WriteLine("e:Main{0}", e.Message);
}
System.Console.In.ReadLine();
}
域名的NetBIOS名称为“test”,完整域名为“test.com”。 “dc.test.com”是DC FQDN,“gc.test.com”是GC FQDN。
它适用于“test.com”,“dc.test.com”“和”gc.test.com“,但它会为”test“和”Environment.UserDomainName“抛出DirectoryServicesCOMException(0x80072020)。
详细的运行结果是:
Test Start
LDAP://TEST
TEST
System.DirectoryServices.DirectoryServicesCOMException (0x80072020): An operati
ons error occurred.
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.RefreshCache()
at ConsoleApplication1.Program.Main(String[] args)
LDAP://test
test
System.DirectoryServices.DirectoryServicesCOMException (0x80072020): An operati
ons error occurred.
at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
at System.DirectoryServices.DirectoryEntry.Bind()
at System.DirectoryServices.DirectoryEntry.RefreshCache()
at ConsoleApplication1.Program.Main(String[] args)
LDAP://test.com
test.com success!
LDAP://dc.test.com
dc.test.com success!
LDAP://gc.test.com
gc.test.com success!
Test End
如果我将其作为domian管理员帐户运行,它的工作正常。知道是什么原因造成的吗?非常感谢!
答案 0 :(得分:0)
你到底想要做什么?如果您在加入域的计算机上,则应该new DirectoryEntry()
。
对于您的错误,当您使用本地帐户登录Windows时,UserDomainName环境变量将设置为本地计算机名称。如果该机器的名称与域名的NetBIOS名称相同,那么如果Windows感到困惑,我不会感到惊讶。