什么';在.NET应用程序中确定计算机名称的最佳方法是什么?

什么';在.NET应用程序中确定计算机名称的最佳方法是什么?,.net,.net,我需要获取运行.NET应用程序的计算机的名称。最好的方法是什么?试试。虽然您需要使用一些互操作代码,但Ray实际上拥有最好的。虽然其他人已经说过它会返回您机器的名称,但请注意 该属性仅返回NetBIOS名称(并且仅当应用程序具有EnvironmentPermissionAccess.Read权限时)。您的计算机名称可能会超过中定义的长度: MAX_COMPUTERNAME_LENGTH 在这些情况下,System.Environment.MachineName将不会返回正确的名称 另外请注

我需要获取运行.NET应用程序的计算机的名称。最好的方法是什么?

试试。虽然您需要使用一些互操作代码,但Ray实际上拥有最好的。

虽然其他人已经说过它会返回您机器的名称,但请注意

该属性仅返回NetBIOS名称(并且仅当应用程序具有EnvironmentPermissionAccess.Read权限时)。您的计算机名称可能会超过中定义的长度:

MAX_COMPUTERNAME_LENGTH  
在这些情况下,System.Environment.MachineName将不会返回正确的名称

另外请注意,您的计算机可以使用多种名称,在Win32中有一种方法能够获得与这些不同名称类型匹配的名称:

  • 计算机名域名
  • 计算机名完全合格
  • ComputerNamedShostName
  • 计算机名称NetBIOS
  • 计算机名称物理域
  • 计算机名称物理数据完全合格
  • 计算机名称PhysicalDnshostName
  • 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());
    }
}

可能吧,但我指出需要SecurityPermissionFlags的最初理由是根本没有人提到它。我想说的是,通常大多数权限都是被授予的,这就导致了名称太长或需要特定名称类型的情况。