我如何使用 C# 监视 Windows 服务,我还必须将这些服务名称、开始时间和服务结束时间保存在 CSV 文件中。如果有任何新服务启动,它应该使用现有 CSV 文件自动写入服务名称、开始时间和服务结束时间。
最佳答案
您可以使用 ServiceController
或 ManagementObjectSearcher
列出正在运行的服务。
这是一个使用 ManagementObjectSearcher
的示例:
using System.Management;
...
StringBuilder sb = new StringBuilder();
string format = "{0},{1},{2},{3},{4}";
// Header line
sb.AppendFormat(format, "DisplayName",
"ServiceName",
"Status",
"ProcessId",
"PathName");
sb.AppendLine();
ManagementObjectSearcher searcher =
new ManagementObjectSearcher("SELECT * FROM Win32_Service");
foreach( ManagementObject result in searcher.Get() )
{
sb.AppendFormat(format, result["DisplayName"],
result["Name"],
result["State"],
result["ProcessId"],
result["PathName"]
);
sb.AppendLine();
}
File.WriteAllText(
@"C:\temp\ManagementObjectSearcher_services.csv",
sb.ToString()
);
要获得开始和停止时间,您似乎必须查询 Windows 事件日志。
这篇博文展示了如何监控事件日志以在服务停止或启动时得到通知: https://dotnetcodr.com/2014/12/02/getting-notified-by-a-windows-service-status-change-in-c-net/
关于c# - 如何使用c#监控windows服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36710858/