2

如果我只知道 exe 文件名,如何在 Windows 程序中知道进程是否正在运行?有问题的进程是 64 位的 TeamSpeak3 ts3client_win64.exe 和 32 位的 ts3client_win32.exe。

我正在使用 C++

4

3 回答 3

5

使用该CreateToolhelp32Snapshot函数创建当前进程表的快照,然后使用Process32FirstProcess32Next函数对快照进行迭代。您可以通过查看结构的szExeName字段来获取每个可执行文件的名称PROCESSENTRY32

有关如何使用这些函数的示例,请参阅MSDN 示例。

这种方法的优点是,与任何EnumProcesses基于 - 的解决方案不同,它不会受到竞争条件的影响:EnumProcesses在您完成枚举进程之后但在您开始打开进程(或阅读我们的进程可执行文件名)。

于 2012-12-21T14:44:16.113 回答
1

您可以使用 、 和 的组合EnumProcessesOpenProcess或者GetModuleFileNameExQueryFullProcessImageName对于 Vista 或更高版本)。MSDN 甚至有一个例子

于 2012-12-01T09:05:22.307 回答
1

Windows NT 有几个用于枚举进程的 API。

  1. 枚举进程
  2. 工具帮助
  3. NtQuerySystemInformation(不鼓励)
  4. WMI 的Win32_Process(远程工作)
于 2012-12-01T09:10:25.353 回答