在.NET应用程序中确定计算机名称的最佳方法是什么?
时间:2020-03-06 14:26:47 来源:igfitidea点击:
我需要获取运行.NET应用程序的计算机的名称。做这个的最好方式是什么?
解决方案
System.Environment.MachineName
尝试使用Environment.MachineName。尽管我们将需要使用一些互操作代码,但Ray实际上是最好的答案。
尽管其他人已经说过System.Environment.MachineName返回计算机名称,但是请注意...
该属性仅返回NetBIOS名称(并且仅在应用程序具有EnvironmentPermissionAccess.Read权限时)。计算机名称可能超过以下定义的长度:
MAX_COMPUTERNAME_LENGTH
在这些情况下,System.Environment.MachineName将不会为我们返回正确的名称!
还要注意,计算机可以使用几种名称,在Win32中,有一种GetComputerNameEx方法可以获取与以下每种不同名称类型匹配的名称:
- ComputerNameDnsDomain
- ComputerNameDnsFullyQualified
- ComputerNameDns主机名
- 计算机名NetBIOS
- ComputerNamePhysicalDnsDomain
- ComputerNamePhysicalDns完全合格
- ComputerNamePhysicalDns主机名
- ComputerNamePhysicalNetBIOS
如果需要此信息,则可能需要通过p / invoke进入Win32,例如:
class Class1 { enum COMPUTER_NAME_FORMAT { ComputerNameNetBIOS, ComputerNameDnsHostname, ComputerNameDnsDomain, ComputerNameDnsFullyQualified, ComputerNamePhysicalNetBIOS, ComputerNamePhysicalDnsHostname, ComputerNamePhysicalDnsDomain, ComputerNamePhysicalDnsFullyQualified } [DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Auto)] static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, [Out] StringBuilder lpBuffer, ref uint lpnSize); [STAThread] static void Main(string[] args) { bool success; StringBuilder name = new StringBuilder(260); uint size = 260; success = GetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNameDnsDomain, name, ref size); Console.WriteLine(name.ToString()); } }