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

4

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

3个回答

8

虽然其他人已经说过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());
    }
}

可能是的,但我最初指出需要SecurityPermissionFlags的理由是没有人提到它。我认为通常情况下大多数权限都被授予,这就留下了名称过长或需要特定名称类型的情况。 - Ray Hayes


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接