C++ Windows - 通过可执行文件路径获取进程的 PID
Posted
技术标签:
【中文标题】C++ Windows - 通过可执行文件路径获取进程的 PID【英文标题】:C++ Windows - Get PIDs of process by executable file path 【发布时间】:2019-09-24 12:09:30 【问题描述】:众所周知并且经常被问到如何从其 PID 获取可执行文件的完整路径。但是,我需要相反:我需要从其可执行文件的绝对路径中找到进程的 PID。
有没有一种简单的方法可以做到这一点,或者我应该获取所有 PID 并手动比较可执行路径?
我为什么需要它?我需要终止这个进程的垃圾实例,而不杀死与我应该终止的进程同名的其他进程。
【问题讨论】:
看看 POSIX 函数。 枚举所有进程,如果名称匹配 - 进程的查询路径 你有想要保留的进程ID吗? 如果您有相同的进程名称但使用不同的 pid,您认为如何区分终止哪个 pid 和不终止哪个 pid? 要弄清楚这一点,我应该使用我运行的可执行文件的绝对路径,它是相同的,也没有。如果名称匹配但不匹配绝对路径,则它是一个要保留的 PID。 【参考方案1】:没有直接的 API 调用来获取绝对路径的进程 ID。正如您所猜测的,您将不得不枚举所有进程,直到找到您感兴趣的路径,然后您将获得其进程 ID。看看EnumProcesses()
或CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS)
。有关示例,请参阅 MSDN 上的 Process Enumeration。
【讨论】:
制造!有用!因此,我制作的完整工作示例代码解决了我的问题:gist.github.com/Wohlstand/ce309fff0a70d94e1c31524bb16fad59以上是关于C++ Windows - 通过可执行文件路径获取进程的 PID的主要内容,如果未能解决你的问题,请参考以下文章
c ++检索可执行文件的图标以在Windows注册表图标路径中使用?
无法获取 Windows 7 C++ 上虚拟文件夹的路径(shell 命名空间扩展相关)