0

非常にサンプルのテスト プログラムを作成し、ドメイン マシンでローカル システム アカウントとして実行します。コードは次のようになります。

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

ドミアン管理者アカウントとして実行すると、すべて正常に動作します。これの原因は何ですか?どうもありがとうございます!

4

1 に答える 1

0

あなたは実際に何をしようとしていますか?ドメインに参加しているマシンを使用している場合は、new DirectoryEntry().

エラーについては、ローカル アカウントで Windows にログオンすると、UserDomainName 環境変数がローカル コンピューター名に設定されます。そのマシンの名前がドメインの NetBIOS 名と同じであれば、Windows が混乱しても不思議ではありません。

于 2013-08-05T15:59:33.950 に答える