Linux 中的“pidof”在 Windows 中相当于什么?

Lek*_*eyn 3 c windows batch-file

在批处理脚本中,我需要获取具有给定二进制路径的进程 ID 列表C:\path\to\binary.exe。在 Linux 中,我可以这样做pidof /path/to/binary

是否有一个 Win32 可执行文件具有相同的功能,支持从 WinXP Home 到 Win7(任务列表不起作用)?

包含此内容的软件包必须是可移植的,因此 10MB 的下载不是我想要的。

是否有可用的 C 函数可以执行此操作并且从 WinXP 到 Win7 均受支持?注意:我想匹配进程路径,而不是其他应用程序也可以使用的文件名。

kic*_*hik 5

wmic.exe 可在 XP、Vista 和 7 上使用,并且可以执行此操作。但是,它不随 Windows XP Home 版本一起提供。

wmic process where ExecutablePath='C:\\windows\\system32\\notepad.exe' get ProcessId
Run Code Online (Sandbox Code Playgroud)

如果您也想支持 Windows XP Home,您可以使用EnumProcessGetModuleFileNameEx。这里的缺点是,如果您不以管理员身份运行,您将无法查询其他用户运行的进程的名称。QueryFullProcessImageName可能会在这里发挥作用,但它是 Vista+。

如果这还不够,您将需要Process32First(swatkat 的代码)。对于每个进程,您需要调用Module32First然后 get MODULEENTRY32->szExePath。请注意,即使这也不是完全可移植的,并且在需要QueryFullProcessImageName的 x64 上也无法正常工作。