c# - 如何使用c#监控windows服务

标签 c# windows service

我如何使用 C# 监视 Windows 服务,我还必须将这些服务名称、开始时间和服务结束时间保存在 CSV 文件中。如果有任何新服务启动,它应该使用现有 CSV 文件自动写入服务名称、开始时间和服务结束时间。

最佳答案

您可以使用 ServiceControllerManagementObjectSearcher 列出正在运行的服务。

这是一个使用 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/

相关文章:

c# - 我应该直接绑定(bind)到从网络服务返回的对象吗?

c# - 如何按多个值对 XML 数据进行分组

windows - 尝试安装适用于 Python 3.4 的 PyV8 时出现错误

android - Android 中 Service、Web 和 Activity 之间的来回通信

c# - RavenDB 中的索引太多

c# - 如何缓存具有多个属性的对象

ruby - pry 开显示像 [äöüßÄÖÜß](utf-8 编码)这样的字符? (可能是特定于 Windows 的问题?)

windows - 使用 SetProcessWorkingSetSize 的优缺点

android - 我怎样才能从android服务获得返回值

java - Android BroadcastReceiver 不工作(包括错误)