如何查明 .exe 是否正在 c++ 中运行?
给定进程名称(例如program.exe),如何确定可执行文件是否正在Windows 上运行?
How can you find out if an executable is running on Windows given the process name, e.g. program.exe?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
C++标准库没有这样的支持。您需要一个操作系统 API 来执行此操作。如果这是 Windows,那么您将使用 CreateToolhelp32Snapshot(),然后使用 Process32First 和 Process32Next 来迭代正在运行的进程。请注意不可避免的竞争条件,当您发现该进程时,该进程可能已经退出。
The C++ standard library has no such support. You need an operating system API to do this. If this is Windows then you'd use CreateToolhelp32Snapshot(), followed by Process32First and Process32Next to iterate the running processes. Beware of the inevitable race condition, the process could have exited by the time you found it.
我刚刚根据汉斯的建议创建了一个。像冠军一样工作!
哦,这是基本代码。
请您必须添加 CStrings sAppPath 和 sAppName。
StartProcess 是一个小函数,它使用 CreateProcess 并返回 PID(此处未使用)。您需要更换它。
这不是一个完整的程序,只是使用 Hans 建议查找程序是否正在运行的代码。一个有趣的测试是将路径设置为 c:\windows\,将应用程序设置为 notepad.exe,并将其设置为 10 秒。
I just created one using Hans suggestion. Works like a champ!
Oh and here is the basic code.
Please you will have to add CStrings sAppPath and sAppName.
StartProcess is a small function that uses CreateProcess and returns the PID(not used here). You will need to replace it.
This is not a complete program, just the code to find if the program is running using Hans suggestion. A fun test is to set the path to c:\windows\ and the app to notepad.exe and set it for 10 seconds.
假设:既然您提到了“.exe”,您就希望它适用于某些 Windows 风格。您想要用 C++ 编写一个程序来确定具有特定可执行名称的程序是否正在运行(无论用于实现目标程序的语言是什么)。
使用 Toolhelp API 或进程状态 API 枚举正在运行的进程。将每个正在运行的进程的可执行文件名称与您要查找的进程进行比较(并注意可能有多个进程具有该可执行文件名称)。
Assumptions: since you mention '.exe', you want this for some flavor of Windows. You want to write a program in C++ to determine whether a program with a particular executable name is running (regardless of the language used to implement the target program).
Enumerate the running processes using either the Toolhelp API or the process status API. Compare the name of the executable for each running process to the one you're looking for (and be aware that there may be more than one process with that executable name).
如果您不想从代码中获取进程详细信息,只需按 Ctrl+Alt+Del 并检查进程列表。
If you don't want to get process detail from code just press Ctrl+Alt+Del and check process list.