如何以托管方式获取 .NET 中的父进程 [英] How to get parent process in .NET in managed way
本文介绍了如何以托管方式获取 .NET 中的父进程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在寻找在 .NET 中获取父进程的方法,但只找到了 P/Invoke 方式.
I was looking a lot for method to get parent process in .NET, but found only P/Invoke way.
推荐答案
这段代码提供了一个很好的界面来查找父进程对象,并考虑到多个进程同名的可能性:
This code provides a nice interface for finding the Parent process object and takes into account the possibility of multiple processes with the same name:
用法:
Console.WriteLine("ParentPid: " + Process.GetProcessById(6972).Parent().Id);
代码:
public static class ProcessExtensions {
private static string FindIndexedProcessName(int pid) {
var processName = Process.GetProcessById(pid).ProcessName;
var processesByName = Process.GetProcessesByName(processName);
string processIndexdName = null;
for (var index = 0; index < processesByName.Length; index++) {
processIndexdName = index == 0 ? processName : processName + "#" + index;
var processId = new PerformanceCounter("Process", "ID Process", processIndexdName);
if ((int) processId.NextValue() == pid) {
return processIndexdName;
}
}
return processIndexdName;
}
private static Process FindPidFromIndexedProcessName(string indexedProcessName) {
var parentId = new PerformanceCounter("Process", "Creating Process ID", indexedProcessName);
return Process.GetProcessById((int) parentId.NextValue());
}
public static Process Parent(this Process process) {
return FindPidFromIndexedProcessName(FindIndexedProcessName(process.Id));
}
}
这篇关于如何以托管方式获取 .NET 中的父进程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文