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 命名空间扩展相关)

如何使用 C++ 获取 Windows 用户配置文件路径的父文件夹

Winform 程序运行路径

winform怎么获取服务器上的文件路径

C#获取本执行程序所在的当前路径