有没有可靠的方法来了解哪些可执行文件调用了我的可执行文件?
我有一个.NET可执行文件,但我想知道是谁启动了我的应用程序。
答案 0 :(得分:1)
您的问题http://www.codeproject.com/KB/threads/ParentPID.aspx
有答案简而言之,您创建了使用lpfCreateToolhelp32Snapshot()
运行的所有流程的快照,然后对其进行迭代,以GetCurrentProcessId()
找到您的流程(由lpfProcess32First()/lpfProcess32Next()
标识)。找到自己的流程后,您获得的结构将为您提供父流程的流程ID,即运行您的应用的流程ID。
获得父PID后,很容易获得exe文件的文件名以及EnumProcessModules()
和GetModuleFileNameEx()
的其他属性。
但你可以使用链接中的代码。
答案 1 :(得分:1)
您想以编程方式找到它吗?然后你会发现这些related questions有用:
如果您只是想查看父进程,可以使用Sysinternals中的Process Explorer。
答案 2 :(得分:1)
为什么你需要知道这个? Windows不像unix那样维护严格的父进程层次结构 - 它在创建进程时记录父进程的PID,但是当此进程消失时它不会更新(因为进程不跟踪其子进程,所以你无法更新它)。这意味着父进程PID可能指向不再存在的进程。更糟糕的是,理论上可以重用进程ID,这意味着父进程ID可以指向完全不同的进程。