gpt4 book ai didi

c# - 如何从 ServiceController 确定 Windows.Diagnostics.Process

转载 作者:可可西里 更新时间:2023-11-01 08:35:30 25 4
gpt4 key购买 nike

这是我的第一篇文章,所以让我先打个招呼吧!

我正在编写一个 Windows 服务来监视同一台服务器上许多其他 Windows 服务的运行状态。我想扩展应用程序以打印服务的一些内存统计信息,但我无法弄清楚如何从特定的 ServiceController 对象映射到其关联的 Diagnostics.Process 对象,我认为我需要确定内存状态。

我发现了如何从 ServiceController 映射到原始图像名称,但我正在监视的许多服务都是从同一图像启动的,因此这不足以确定进程。

有谁知道如何从给定的 ServiceController 获取 Process 对象?也许通过确定服务的 PID?或者是否有人对此问题有其他解决方法?

非常感谢,亚历克斯

最佳答案

在这种情况下,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);
}
}
}

关于c# - 如何从 ServiceController 确定 Windows.Diagnostics.Process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1574019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com