2015-04-21 3 views
3

Когда я использую следующую функцию как isRunning ("example.exe"); он всегда возвращает 0 независимо от того, выполняется ли процесс или нет.Проверка выполнения заданного процесса

Я попытался сделать это std :: cout < < pe.szExeFile; в цикле do-while, и он выводит все процессы в том же формате, в каком я пытаюсь передать эту функцию.

Проект многобайтовый набор символов, в случае, если это имеет значение.

bool isRunning(CHAR process_[]) 
{ 
    HANDLE pss = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); 

    PROCESSENTRY32 pe = { 0 }; 
    pe.dwSize = sizeof(pe); 

    if (Process32First(pss, &pe)) 
    { 
     do 
     { 
      if (pe.szExeFile == process_) // if(!strcmp(pe.szExeFile, process_)) is the correct line here 
       return true; // If you use this remember to close the handle here too with CloseHandle(pss); 
     } while (Process32Next(pss, &pe)); 
    } 

CloseHandle(pss); 

return false; 
} 

Кажется, я не нашел свою ошибку. Спасибо за ваше время.

+0

Вы, кажется, сравнивая 'символ *' не фактическое имя процесса, вы должны будете использовать 'strcmp' – Borgleader

+0

Примечание: Вы не закрывать ручку' pss' в случае включения совпадение. Я не знаю, это ли? Это очень похоже на утечку. Вы должны либо убедиться, что каждый путь кода выполняет очистку вручную, либо используйте защитную оболочку области видимости. – stefan

+0

Стефан: Да, спасибо, что указали это. – shaks

ответ

5

Вы используете if (pe.szExeFile == process_), который сравнивает значения указателя. Вы должны использовать что-то вроде strcmp или _stricmp, чтобы сравнить фактические значения строк.

например.

if(strcmp (pe.szExeFile, process_) == 0) 
    return true; 
Смежные вопросы