Это касается процессов Windows XP.
У меня есть выполнение процесса, давайте назовем его Process1. Process1 создает новый процесс, Process2, и сохраняет его идентификатор.
Теперь, в какой-то момент Process1 хочет, чтобы Process2 сделал что-то, таким образом, он сначала должен удостовериться, что Process2 все еще жив и что пользователь не не уничтожил его.
Как я могу проверить, что этот процесс все еще работает? Так как я создал его, у меня есть идентификатор Процесса, я думал бы, что существует некоторая библиотечная функция вроде IsProcessIDValid (идентификатор), но я не могу найти его на MSDN
решение, предоставленное @user152949, как это было отмечено в комментариях, пропускает первый процесс и не повреждается, когда "существует", имеет значение true. Позвольте мне обеспечить исправленную версию:
#include <windows.h>
#include <tlhelp32.h>
bool IsProcessRunning(const wchar_t* const processName) {
PROCESSENTRY32 entry;
entry.dwSize = sizeof(PROCESSENTRY32);
const auto snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (!Process32First(snapshot, &entry)) {
CloseHandle(snapshot);
return false;
}
do {
if (!_wcsicmp(entry.szExeFile, processName)) {
CloseHandle(snapshot);
return true;
}
} while (Process32Next(snapshot, &entry));
CloseHandle(snapshot);
return false;
}