长期运行服务列表C#

时间:2016-03-16 20:46:43

标签: c#

如何在当前计算机上获取长时间运行的服务列表?

我可以列出所有进程但是如何添加以过滤长时间运行的进程?

private void ListProcesses()  
{  
    Process[] processCollection = Process.GetProcesses();  
    foreach (Process p in processCollection)  
    {  
        Console.WriteLine(p.ProcessName);  
    }  
} 

3 个答案:

答案 0 :(得分:2)

Process类有一个datetime属性Process.StartTime,它获取关联进程启动的时间。 您可以使用它来确定哪些运行时间更长。

答案 1 :(得分:1)

  

我可以列出所有进程但是如何添加以过滤长时间运行的进程?

喜欢(假设你要求的时间):

foreach (var p in processCollection.Where(n => (DateTime.Now - p.StartTime) > someThresholdInterval))
{
   //...long running
}

您还可以使用其他属性,例如TotalProcessorTime,这将为您提供该进程实际使用处理器的总时间(与休眠相比),这在某些情况下可能更有趣。

如果你真的想要服务而不是进程,那么有一种不同的方法可以获得这些服务。然而,要使服务使用ServiceController.GetServices,我认为在他们开始时没有办法获得服务。

答案 2 :(得分:1)

仅用于运行服务,我们必须使用ServiceController和ManagementObject。这是我的代码" long"运行服务:

 static public void Main()
        {
            TimeSpan Interval = new TimeSpan(5,0,10); // as exemple

            var scServices= ServiceController.GetServices();

            foreach (ServiceController scTemp in scServices)
            {
                if (scTemp.Status == ServiceControllerStatus.Running)
                {
                    ManagementObject wmiService;
                    wmiService = new ManagementObject("Win32_Service.Name='" + scTemp.ServiceName + "'");
                    wmiService.Get();

                    var id = Convert.ToInt32(wmiService.Properties["ProcessId"].Value);
                    Process p = Process.GetProcessById(id);

                    if ((DateTime.Now.Subtract(p.StartTime)) > Interval)
                    {
                        Console.WriteLine("  Service :        {0}", scTemp.ServiceName);
                        Console.WriteLine("  Display name:    {0}", scTemp.DisplayName);
                        Console.WriteLine("  StartTime:       {0}", p.StartTime);
                    }
                }
            }

            Console.ReadLine();
        }