You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8 Windows服务中如何获取EventViewer内的域名信息

获取Windows服务中EventViewer的Computer字段域名部分

可以通过以下几种方式获取目标域名值:

方法1:从计算机完全限定域名(FQDN)解析

Windows事件查看器里的Computer:字段对应计算机的完全限定域名(FQDN),获取FQDN后拆分出域名部分即可:

using System.Net;

var fqdn = Dns.GetHostEntry(Dns.GetHostName()).HostName;
// 拆分去掉主机名,保留域名部分
var domainPart = string.Join(".", fqdn.Split('.').Skip(1));

注:若计算机名本身包含点号(不符合规范但存在可能性),需额外校验拆分后的段数是否大于1。

方法2:通过Windows API直接获取DNS域名

使用GetComputerNameExAPI可直接获取DNS域名,无需额外拆分,准确性更高:

using System.Runtime.InteropServices;

public static string GetDnsDomainName()
{
    int bufferSize = 256;
    StringBuilder buffer = new StringBuilder(bufferSize);
    if (GetComputerNameEx(COMPUTER_NAME_FORMAT.ComputerNameDnsDomain, buffer, ref bufferSize))
    {
        return buffer.ToString();
    }
    throw new System.ComponentModel.Win32Exception();
}

[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern bool GetComputerNameEx(COMPUTER_NAME_FORMAT NameType, StringBuilder lpBuffer, ref int lpnSize);

private enum COMPUTER_NAME_FORMAT
{
    ComputerNameNetBIOS,
    ComputerNameDnsHostname,
    ComputerNameDnsDomain,
    ComputerNameDnsFullyQualified,
    ComputerNamePhysicalNetBIOS,
    ComputerNamePhysicalDnsHostname,
    ComputerNamePhysicalDnsDomain,
    ComputerNamePhysicalDnsFullyQualified
}

方法3:读取系统注册表项

从注册表中读取DNS域名信息,适合兼容旧系统的场景:

using Microsoft.Win32;

using var registryKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters");
var domainName = registryKey?.GetValue("Domain")?.ToString();
var dnsSuffix = registryKey?.GetValue("NV Domain")?.ToString();
// 优先取Domain值,为空则用DNS后缀
var targetDomain = string.IsNullOrEmpty(domainName) ? dnsSuffix : domainName;

内容的提问来源于stack exchange,提问作者RichJohnstone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:59:52