1. ホーム
  2. c#

[解決済み] .NETの親プロセスをマネージドで取得する方法

2023-02-20 16:04:07

質問

.NETで親プロセスを取得する方法をいろいろ探していたのですが、P/Invokeの方法しか見つかりませんでした。

どのように解決するのですか?

このコードは、親プロセスオブジェクトを見つけるための優れたインターフェイスを提供し、 同じ名前の複数のプロセスの可能性を考慮に入れています。

使用方法

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));
    }
}