ServiceController显示不正确的MachineName

Jos*_*Zyl 3 c# windows-services

我有以下代码

    private DataTable GetServices(string[] serviceNames)
    {
        DataTable dt = new DataTable("Services");
        dt.Columns.Add("MachineName", typeof(string));
        dt.Columns.Add("ServiceName", typeof(string));
        dt.Columns.Add("ServiceStatus", typeof(string));

        ServiceController[] services = ServiceController.GetServices();
        foreach (ServiceController scTemp in services)
        {
            if (serviceNames.Contains(scTemp.DisplayName))
            {

                dt.Rows.Add(scTemp.MachineName, scTemp.DisplayName, scTemp.Status);
            }
        }
        return dt;
    }
Run Code Online (Sandbox Code Playgroud)

它返回以下内容

MachineName,ServiceName,ServiceStatus
。,Adobe Flash Player更新服务,已停止
。,应用程序体验,正在运行
。,Application Layer Gateway服务,已停止
。,Application Host Helper服务,正在运行。

scTemp.MachineName 返回一个 .

如何获取返回真实计算机名称的信息?

Jeh*_*hof 5

“。” 表示本地计算机。要使用真实的MachineName,可以使用Environment类的属性MachineName

为了解决您的问题,如果ServiceController的MachineName返回“。”,则需要添加一个自定义映射。

if (scTemp.MachineName.Equals(".")) {
  dt.Rows.Add(Environment.MachineName, scTemp.DisplayName, scTemp.Status);
}
else {
  dt.Rows.Add(scTemp.MachineName, scTemp.DisplayName, scTemp.Status);
}
Run Code Online (Sandbox Code Playgroud)