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 返回一个 .
如何获取返回真实计算机名称的信息?
“。” 表示本地计算机。要使用真实的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)