如何在VB.NET中获取运行服务应用的服务器UNC/完全限定名称
在VB.NET中获取服务器的完全限定域名(FQDN)
刚好之前我也碰到过这个需求——My.Computer.Name和System.Environment.MachineName确实只能返回短的NETBIOS名称,没法满足跨网络识别的需求。下面给你两种简单可靠的实现方式:
方法一:使用System.Net.Dns类(推荐)
这是最常用的方式,通过DNS解析直接获取完整的主机名,代码简洁且跨网络场景表现稳定:
Imports System.Net ' 获取完整的完全限定域名 Dim hostEntry As IPHostEntry = Dns.GetHostEntry(Dns.GetHostName()) Dim fullComputerName As String = hostEntry.HostName ' 输出结果(比如 ABCD1234.mydomain.mysubdomain.com) Console.WriteLine(fullComputerName)
原理是:Dns.GetHostName()先拿到本地主机的短名称,再通过GetHostEntry()向DNS服务器查询该主机的完整记录,最终HostName属性就是你需要的可跨网络识别的完全限定名称。
方法二:通过WMI读取系统配置
如果你的环境中DNS解析不稳定,或者希望直接从本地系统获取信息,WMI是个不错的选择,它会读取系统的DNS主机名和域信息并拼接:
Imports System.Management Dim fullComputerName As String = String.Empty ' 查询Win32_ComputerSystem类获取相关信息 Using searcher As New ManagementObjectSearcher("SELECT DNSHostName, Domain FROM Win32_ComputerSystem") For Each systemObj As ManagementObject In searcher.Get() ' 拼接DNS主机名和域名得到FQDN fullComputerName = $"{systemObj("DNSHostName")}.{systemObj("Domain")}" Exit For Next End Using ' 输出结果 If Not String.IsNullOrEmpty(fullComputerName) Then Console.WriteLine(fullComputerName) End If
注意:使用WMI需要项目引用System.Management程序集,而且运行程序的账号需要有读取WMI信息的权限。
额外提示
- 如果服务器没有加入域,或者DNS配置存在问题,以上方法可能仍然返回短名称,这时候可以做个判断:如果
fullComputerName和My.Computer.Name一致,说明没有获取到完整域名,需要检查网络或系统配置。 - 第一种方法(Dns类)在大多数网络环境下都能正常工作,是优先推荐的方案。
内容的提问来源于stack exchange,提问作者Alan O'Brien
相关产品推荐
相关产品推荐

