Когда я использую следующую функцию как 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;
}
Кажется, я не нашел свою ошибку. Спасибо за ваше время.
Вы, кажется, сравнивая 'символ *' не фактическое имя процесса, вы должны будете использовать 'strcmp' – Borgleader
Примечание: Вы не закрывать ручку' pss' в случае включения совпадение. Я не знаю, это ли? Это очень похоже на утечку. Вы должны либо убедиться, что каждый путь кода выполняет очистку вручную, либо используйте защитную оболочку области видимости. – stefan
Стефан: Да, спасибо, что указали это. – shaks