【问题标题】:.NET: How to get a Process object, given the service name?.NET:给定服务名称,如何获取 Process 对象?
【发布时间】:2012-09-13 13:33:03
【问题描述】:

给定一个服务名称(例如SNMPTRAP)我怎样才能得到一个System.Diagnostics.Process 对象?

到目前为止,我已经找到了 System.ServiceProcess.ServiceController 类和 System.Diagnostics.Process 类,但似乎无法从中得到一个。

【问题讨论】:

标签: .net service process system.diagnostics


【解决方案1】:

看起来 WMI 无需借助 interop/Win32 即可工作。下面是一个概念验证:

    private static Process ProcessFromServiceName(string serviceName)
    {
        // Note abuse of foreach as a lazy way of getting first item.
        // Also assumes that the first service in the collection is the correct one.

        string queryText = String.Format(   CultureInfo.InvariantCulture,
                                            "SELECT * FROM Win32_Service WHERE Name='{0}'",
                                            serviceName);
        var query = new SelectQuery(queryText);
        var searcher = new ManagementObjectSearcher(query);
        foreach (ManagementObject service in searcher.Get())
        {
            int processId = (int)(uint)service.Properties["ProcessId"].Value;
            Process process = Process.GetProcessById(processId);
            return process;
        }
        return null;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2016-09-03
    • 2022-10-06
    相关资源
    最近更新 更多