如何确定.exe是否在c ++中运行?

时间:2010-07-28 17:00:55

标签: c++ winapi executable

如何根据进程名称查明可执行文件是否在Windows上运行,例如: PROGRAM.EXE?

4 个答案:

答案 0 :(得分:5)

C ++标准库没有这样的支持。您需要操作系统API才能执行此操作。如果这是Windows,那么您将使用CreateToolhelp32Snapshot(),然后使用Process32First和Process32Next来迭代正在运行的进程。要注意不可避免的竞争条件,这个过程可能会在您找到它的时候退出。

答案 1 :(得分:2)

我刚用Hans建议创建了一个。像冠军一样工作!

哦,这是基本代码。

请您必须添加CStrings sAppPath和sAppName。

StartProcess是一个小函数,它使用CreateProcess并返回PID(此处未使用)。你需要更换它。

这不是一个完整的程序,只是用于查找程序是否使用Hans建议运行的代码。一个有趣的测试是将路径设置为c:\ windows \,将应用程序设置为notepad.exe并将其设置为10秒。

#include <tlhelp32.h>
PROCESSENTRY32 pe32 = {0}; 
HANDLE    hSnap;
int       iDone;
int       iTime = 60;
bool      bProcessFound;

while(true)    // go forever
{
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    pe32.dwSize = sizeof(PROCESSENTRY32); 
    Process32First(hSnap,&pe32);     // Can throw away, never an actual app

    bProcessFound = false;   //init values
    iDone = 1;

    while(iDone)    // go until out of Processes
    {
        iDone = Process32Next(hSnap,&pe32);
        if (strcmp(pe32.szExeFile,sAppName) == 0)    // Did we find our process?
        {
            bProcessFound = true;
            iDone = 0;
        }
    }

    if(!bProcessFound)    // if we didn't find it running...
    {
        startProcess(sAppPath+sAppName,"");             // start it
    }
    Sleep(iTime*1000);    // delay x amount of seconds.
}

答案 2 :(得分:0)

假设:既然你提到了'.exe',那么你想要一些Windows的味道。您希望用C ++编写程序来确定具有特定可执行文件名的程序是否正在运行(无论用于实现目标程序的语言如何)。

使用Toolhelp API或进程状态API枚举正在运行的进程。将每个正在运行的进程的可执行文件的名称与您正在查找的进程的名称进行比较(并注意可能有多个具有该可执行文件名的进程)。

答案 3 :(得分:0)

hProcessInfo = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID );

            do{
                if(strcmp(pe32.szExeFile,"process.exe") == 0)
                {
                    processfound = true;
                    break;
                }
}while( Process32Next( hProcessSnap, &pe32 ) );

如果您不想从代码中获取流程详细信息,只需按Ctrl + Alt + Del并检查流程列表。