【问题标题】:.NET: How to get a Process object, given the service name?.NET:给定服务名称,如何获取 Process 对象?
【发布时间】:2012-09-13 13:33:03
【问题描述】:
【问题讨论】:
标签:
.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;
}