长时间运行的服务列表C#

长时间运行的服务列表C#,c#,C#,如何获取当前计算机上长期运行的服务列表 我可以列出所有进程,但如何添加到筛选长时间运行的进程 private void ListProcesses() { Process[] processCollection = Process.GetProcesses(); foreach (Process p in processCollection) { Console.WriteLine(p.ProcessName); } }

如何获取当前计算机上长期运行的服务列表

我可以列出所有进程,但如何添加到筛选长时间运行的进程

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

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

Process类有一个datetime属性Process.StartTime,该属性获取关联进程的启动时间。 你可以用它来找出哪些能跑更长时间

我可以列出所有进程,但如何添加到筛选长时间运行的进程

private void ListProcesses()  
{  
    Process[] processCollection = Process.GetProcesses();  
    foreach (Process p in processCollection)  
    {  
        Console.WriteLine(p.ProcessName);  
    }  
} 
类似于(假设您要的是墙时间):

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

如果您确实想要服务,而不是流程,那么有一种不同的方法来获得这些服务。然而,为了让服务得到使用,我不认为有一种方法可以在服务开始时获得

我可以列出所有进程,但如何添加到筛选长时间运行的进程

private void ListProcesses()  
{  
    Process[] processCollection = Process.GetProcesses();  
    foreach (Process p in processCollection)  
    {  
        Console.WriteLine(p.ProcessName);  
    }  
} 
类似于(假设您要的是墙时间):

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


如果您确实想要服务,而不是流程,那么有一种不同的方法来获得这些服务。然而,要使用服务,我认为没有办法在服务启动时就开始使用。

仅用于运行服务,我们必须使用ServiceController和ManagementObject。以下是我的“长时间”运行服务代码:

 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();
        }

仅对于运行服务,我们必须使用ServiceController和ManagementObject。以下是我的“长时间”运行服务代码:

 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();
        }

我认为您应该首先定义“长时间运行流程”long running=长时间运行?较早的?如果您谈论的是实际的墙时间,那么您可以使用每个进程
StartTime
来计算它们已经运行了多长时间,并过滤到高于您想要使用的阈值的时间。我认为您应该定义“长时间运行进程”firstLong running=长时间运行?较早的?如果您谈论的是实际的墙时间,那么您可以使用每个进程
StartTime
来计算它们已经运行了多长时间,并过滤到高于您想要使用的阈值的进程。