2

我正在处理一个 MS Windows C# Winform 项目,但我无法获得 PPID(父进程 ID)。我找到了许多解决方案,但似乎没有一个适用于上述操作系统和语言。

如何获得 PPID?

4

2 回答 2

1

如果您可以使用 System.Management,那就很简单了:

    private static int GetParentProcess(int Id)
    {
        int parentPid = 0;
        using (ManagementObject mo = new ManagementObject("win32_process.handle='" + Id.ToString() + "'"))
        {
            mo.Get();
            parentPid = Convert.ToInt32(mo["ParentProcessId"]);
        }
        return parentPid;
    }

否则,您可能不得不像这样通过 CreateToolhelp32Snapshot 求助于 P/Invoke 调用

于 2012-12-24T13:38:09.683 回答
0

.NET 不提供内置方式。Process.GetProcesses()它本身用于NtQuerySystemInformation(SystemProcessInformation,)查询大多数进程属性,它返回的条目有一个代码不使用的 PPID 字段。

所以,要走的路是使用外部技术:

其他需要注意的事项:

  • 请记住,您获得信息的任何进程都可以随时结束(关键系统进程除外,但您可能对它们不太感兴趣)

  • PID 可在 Windows 中重复使用,而无需重置 PPID。要过滤掉可能的“假父母”,请查看StartTime. 真正的父母会比孩子更早开始,一个假的——晚一点。

于 2014-10-29T13:26:09.397 回答