CurrentDomain和UserDomainName有什么区别?

时间:2017-10-03 16:15:13

标签: c# winforms visual-studio-2015 dns active-directory

最近,一位客户抱怨我们的产品没有填充域名。

我们的代码使用用户名和用户的域名来查询其在Active Directory中的成员资格卷。

在我们的代码中,我们使用Environment.UserDomainName

var domain = Environment.UserDomainName;

当我查看这个简单的代码行时,我发现它可能引发 PlatformNotSupportedException InvalidOperationException

Environment.UserDomainName

寻找另一种阅读域名的方法,我遇到了AppDomain.CurrentDomain

var domain = AppDomain.CurrentDomain.FriendlyName.Split(".".ToArray())[0];

这很好,但它似乎也有一个可以触发的 AppDomainUnloadedException

AppDomain.CurrentDomain

第一个问题:
这两种方法是否总是为在本地PC上运行程序的给定用户返回相同的信息?

第二个问题:
一种方法是否比另一种更容易“异常”(同样,对于在本地PC上运行我们程序的给定用户而言)?

最后一个问题:
是否有一种获取运行我们的应用程序的用户的本地域名的方法,该方法不会引发异常?

编辑:对于Tyler Lee

For Tyler Lee

2 个答案:

答案 0 :(得分:2)

您是否尝试过查看AppDomain.CurrentDomain.FriendlyName的价值是什么?

enter image description here

回答问题1:不,他们不会 问题2似乎不适用于考虑问题1 问题3:可能不是。 Environment.UserDomainName似乎是获取网络域名的来源,正如您所发现的,它有可能产生异常。 MSDN页面提供了有关何时抛出这些异常的详细信息,您应该编写代码以便在发生这些异常时能够处理它。

答案 1 :(得分:0)

AppDomain.CurrentDomain Property是当前应用程序的域和当前线程。

换句话说,这是项目的领域。

在Visual Studio中,在“项目的属性”页面下,这将被称为项目的程序集名称。

Visual Studio Assembly name

相比之下,Environment.UserDomainName Property是当前用户登录的网络名称。

这两者无关。