c# - 检查正在运行的特定进程的快速方法

标签 c# c++ windows delphi

要检查进程是否正在运行,可以使用“CreateToolHelp32SnapShot”Windows API 函数并枚举正在运行的进程。示例 C/C++ 代码在回答问题中给出: Check whether one specific process is running on windows with C++

我的问题是,如果您知道自己正在寻找一个特定过程,是否有更快的方法来找到答案而不必依次检查每个过程?我们需要定期检查我们的远程支持工具 TeamViewer.exe 是否正在运行。请注意,TeamViewer 是由第三方编写的,我们无法控制它或了解 EXE 的内部结构。

编辑:

TeamViewer 提供了一些有关其流程内部结构的信息,可用于在这种情况下加快此过程(参见已接受的答案)。答案还显示了如何加快对任何进程的检查(通过保存进程 ID)。

最佳答案

您必须采取的第一步涉及枚举进程。使用 toolhelp 或 EnumProcesses 执行此操作。如果找到您的进程,将 PID 传递给 OpenProcess 以获取进程句柄。然后等待进程收到信号。这样就避免了在初始枚举之外进行轮询的需要。

如果您的初始枚举未能找到该过程,您将不得不重复枚举。使用 toolhelp 或 EnumProcesses 中的任何一个都被证明更有效率。也许限制投票。您也可以选择使用 WMI 来接收新进程创建的通知,这样就完全避免了轮询的需要。

关于c# - 检查正在运行的特定进程的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29142727/

相关文章:

c# - 用户在 asp.net MVC 3 url 中输入正斜杠 "/"

c++ - C++ 中的枚举映射

C++容器,在析构时自动删除元素

c++ - 选择从 Windows 将文件拖放到 GLFW 应用程序中

c# - 类型 {1} 中不存在必需的属性 {0}。添加FK时的 Entity Framework (模型优先)

C# 如何在字符串中写行特定字符串?

c++ - QTimer 与 Windows 8 的奇怪准确性

windows - Windows 上存储的 github 身份验证 token 在哪里?

windows - 什么会导致节句柄泄漏?

c# - 使用 CreateGraphics 而不是自定义绘图的 Paint 事件处理程序时出现绘图故障