Ale*_*lex 11 .net c# wmi windows-services process
这是我的第一篇文章,所以让我先说一下你好!
我正在编写一个Windows服务来监视同一服务器上许多其他Windows服务的运行状态.我想扩展应用程序以打印服务的一些内存统计信息,但是我无法确定如何从特定的ServiceController对象映射到其关联的Diagnostics.Process对象,我认为我需要确定内存状态.
我发现了如何从ServiceController映射到原始映像名称,但我监视的许多服务都是从同一映像启动的,因此这不足以确定进程.
有谁知道如何从给定的ServiceController获取Process对象?也许通过确定服务的PID?或者,是否有人有这个问题的另一种解决方法?
非常感谢,Alex
Jus*_*ant 25
在这种情况下,System.Management应该适合您.这是一个让您入门的示例:
using System;
using System.Diagnostics;
using System.ServiceProcess;
using System.Management;
class Program
{
static void Main(string[] args)
{
foreach (ServiceController scTemp in ServiceController.GetServices())
{
if (scTemp.Status == ServiceControllerStatus.Stopped)
continue; // stopped, so no process ID!
ManagementObject service = new ManagementObject(@"Win32_service.Name='" + scTemp.ServiceName + "'");
object o = service.GetPropertyValue("ProcessId");
int processId = (int) ((UInt32) o);
Process process = Process.GetProcessById(processId);
Console.WriteLine("Service: {0}, Process ID: {1}", scTemp.ServiceName, processId);
}
}
}
Run Code Online (Sandbox Code Playgroud)