为什么System.Environment.MachineName值大写?

Use*_*rol 5 .net windows security .net-4.0 principalpermission

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

Han*_*son 6

使用Dns.GetHostName代替,这应该返回正确的大小写(至少在我的计算机上是这样)。

  • 如果有人感兴趣(就像我一样)[这里是调用的本机方法](https://msdn.microsoft.com/en-us/library/windows/desktop/ms738527(v=vs.85).aspx)得到结果。如果您计划使用此程序,则有一些可能相关的流程详细信息。 (2认同)

Qua*_*tic 5

Environment.MachineName.NET 4.7.1的源代码在这里:https : //referencesource.microsoft.com/#mscorlib/system/environment.cs,be0b5c103d248dce

它 p/invokesGetComputerName如下所示: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 名称。