2010-12-18 36 views
4

我的机器名称是小写(我看到在高级系统设置对话框中,计算机名称选项卡),但System.Environment.MachineName报告大写。这是为什么?这对我来说是一个真正的问题,因为从我的测试PrincipalPermissionAttribute对角色名称进行区分大小写比较(我将自定义角色映射到Windows组,并且我的环境是非域)。有任何建议吗?为什么System.Environment.MachineName值是大写的?

回答

3

改为使用Dns.GetHostName,应该返回正确的大小写(至少它在我的电脑上)。

+0

谢谢,为我工作! Dns.GetHostName()可能返回一个与NETBIOS名称不同的名称(因为我使用它来构造本地Windows组名)? – UserControl 2010-12-18 14:13:11

+0

@用户:好吧,'GetHostName'将返回DNS主机名,但我不记得那是如何与netbios名称相关的。 – 2010-12-18 14:20:15

+1

如果任何人有兴趣(因为我是)[这里是本地方法](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738527(v = vs.85).aspx)即调用来获得结果。如果您打算使用此功能,请提供一些有关此过程的详细信息。 – Will 2015-04-06 19:58:24

1

根据这个MSDN文章,它的情况下 - 不敏感 http://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx

在这情况下,它是做区分大小写的比较?

+0

我刚刚重新测试它,可以确认如果我有角色为“MYBOX \ SupportPersonnel”PrincipalPermission引发异常,但在“mybox \ SupportPersonnel”的情况下,一切都按预期工作。我的环境是Windows 7 x64。 – UserControl 2010-12-18 14:09:55

1

Environment.MachineName为用于.NET 4.7.1的源是在这里:https://referencesource.microsoft.com/#mscorlib/system/environment.cs,be0b5c103d248dce

它的p /调用GetComputerName如这里看出:https://referencesource.microsoft.com/#mscorlib/microsoft/win32/win32native.cs,0c7d7f4f83d4ddd0

这里是GetComputerName功能:https://msdn.microsoft.com/en-us/library/windows/desktop/ms724295(v=vs.85).aspx,其中指出:

GetComputerName只检索本地计算机的NetBIOS名称。 要检索DNS主机名称,DNS域名或DNS名称的完全限定 ,请调用GetComputerNameEx函数。

的MSDN的计算机名称,https://msdn.microsoft.com/en-us/library/ms724220(VS.85).aspx,指出:

的NetBIOS名称由最多15个字节的OEM字符,包括 字母,数字,连字符和句号。某些字符是特定于 的字符集。 NetBIOS名称通常在OEM 字符集中表示。 OEM字符集取决于语言环境。某些OEM 字符集将某些字符表示为两个字节。 NetBIOS 按照惯例,名称以大写字母表示,其中 从小写字母到大写字母的翻译算法是OEM字符集 的依赖项。

因此,NetBIOS名称按惯例是大写,System.Environment.MachineName返回系统的NetBIOS名称。

相关问题