4

我有以下代码

    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;
    }

它返回以下内容

MachineName,ServiceName,ServiceStatus
.,Adobe Flash Player 更新服务,已停止
.,应用程序体验,正在运行
.,应用层网关服务,已停止
.,应用程序主机助手服务,正在运行

scTemp.MachineName返回一个.

我怎样才能让它返回真实的计算机名称?

4

2 回答 2

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);
}
于 2012-06-05T07:19:25.877 回答
3

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

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

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

于 2012-06-05T07:21:16.093 回答