ServiceController显示不正确的MachineName

时间:2012-06-05 07:13:19

标签: 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;
    }

返回以下内容

  

计算机名,服务名称,ServiceStatus
  。,Adobe Flash Player更新服务,已停止
  。,应用经验,运行
  。,应用层网关服务,停止
  。,应用程序主机帮助程序服务,运行

scTemp.MachineName返回.

如何让它返回真实的计算机名称?

2 个答案:

答案 0 :(得分:4)

“。”表示本地计算机。要使用真实的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);
}

答案 1 :(得分:3)

来自MSDN:ServiceController.MachineName - 运行与此ServiceController实例关联的服务的计算机的名称。默认值为本地计算机(“。”)。

您可以通过获取本地计算机名称 Environment.MachineName

http://msdn.microsoft.com/en-us/library/system.environment.machinename(v=vs.71).aspx