我需要获取运行我的.NET应用程序的机器的名称.做这个的最好方式是什么?
System.Environment.MachineName
虽然其他人已经说过System.Environment.MachineName会返回机器的名称,但要注意......
该属性仅返回NetBIOS名称(并且仅当您的应用程序具有EnvironmentPermissionAccess.Read权限时).您的机器名称可能超过以下定义的长度:
MAX_COMPUTERNAME_LENGTH
在这些情况下,System.Environment.MachineName不会返回正确的名称!
另请注意,您的计算机可以使用多个名称,在Win32中有一个方法GetComputerNameEx,它能够获取与这些不同名称类型相匹配的名称:
ComputerNameDnsDomain
ComputerNameDnsFullyQualified
ComputerNameDnsHostname
ComputerNameNetBIOS
ComputerNamePhysicalDnsDomain
ComputerNamePhysicalDnsFullyQualified
ComputerNamePhysicalDnsHostname
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()); } }