【问题标题】:What is the difference between CurrentDomain and UserDomainName?CurrentDomain 和 UserDomainName 有什么区别?
【发布时间】:2018-03-14 21:59:27
【问题描述】:

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

我们的代码使用用户名和用户的域名来查询他们在 Active Directory 中的会员名册。

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

var domain = Environment.UserDomainName;

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

寻找另一种读取域名的方法,我偶然发现了AppDomain.CurrentDomain

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

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

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

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

最后一个问题:
有没有一种方法可以获取运行我们应用程序的用户的本地域名并且不会引发异常?

编辑:致泰勒·李

【问题讨论】:

  • 您在尝试使用Environment.UserDomainName时遇到了哪些异常?
  • 我们的客户报告了 PlatformNotSupportedException。我的开发 PC 上没有任何错误。这就是我问这个问题的原因。
  • 您的客户在哪个平台上运行?
  • @TylerLee - 我上周将该问题发送给他们的代表询问他们,但我没有收到回复。我知道他们正在 PC 上进行测试,但我不知道它是独立的还是域的一部分。

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


【解决方案1】:

您是否尝试过查看AppDomain.CurrentDomain.FriendlyName 的值是多少?

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

【讨论】:

  • 不在我的机器上。他们都是一样的。这就是我来这里询问的原因。
  • @jp2code 我看到了你的附加图片。就像我的例子一样,这两个值不匹配。如果你看到这个我很困惑为什么你问他们是否会匹配。它们的相似之处在于您的应用程序与您的网络域命名相同,但HARRIS 不等于Harris.vshost.exe(甚至在 Visual Studio 调试下不运行时甚至是 Harris.exe)
  • Microsoft 的文档令人困惑。没想到一个是专门针对项目申请信息的,另一个是针对网络域信息的。不过,StackOverflow.com 不会让我删除这个问题,因为它有答案。
  • 项目选择的程序集名称恰好与网络的域名相同,这只是一个疯狂的巧合。
【解决方案2】:

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

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

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

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

两者没有关系。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    • 2013-08-19
    相关资源
    最近更新 更多