如果我只知道 exe 文件名,如何在 Windows 程序中知道进程是否正在运行?有问题的进程是 64 位的 TeamSpeak3 ts3client_win64.exe 和 32 位的 ts3client_win32.exe。
我正在使用 C++
如果我只知道 exe 文件名,如何在 Windows 程序中知道进程是否正在运行?有问题的进程是 64 位的 TeamSpeak3 ts3client_win64.exe 和 32 位的 ts3client_win32.exe。
我正在使用 C++
使用该CreateToolhelp32Snapshot
函数创建当前进程表的快照,然后使用Process32First
和Process32Next
函数对快照进行迭代。您可以通过查看结构的szExeName
字段来获取每个可执行文件的名称PROCESSENTRY32
。
有关如何使用这些函数的示例,请参阅MSDN 示例。
这种方法的优点是,与任何EnumProcesses
基于 - 的解决方案不同,它不会受到竞争条件的影响:EnumProcesses
在您完成枚举进程之后但在您开始打开进程(或阅读我们的进程可执行文件名)。
您可以使用 、 和 的组合EnumProcesses
(OpenProcess
或者GetModuleFileNameEx
,QueryFullProcessImageName
对于 Vista 或更高版本)。MSDN 甚至有一个例子。
Windows NT 有几个用于枚举进程的 API。