我有以下代码
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
返回.
如何让它返回真实的计算机名称?
答案 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