как узнать что процесс полностью завершился, и система сняла блокировку на чтение/запись с исполняемого файла; это делается при помощи мьютексов, или как-то ещё ?
Как менее правильный, но тоже вариант, можешь пытаться открывать файл на запись до тех пор, пока он не откроется
если вызвать ExitProcess с кодом STILL_ACTIVE, GetExitCodeProcess так и будет возвращать STILL_ACTIVE
А может, кто знает ещё какой-нить способ? Мне как-то нужно было именно проверить, не завершился ли процесс - пришлось использовать GetExitCodeProcess, полагаясь на чужую программу.
Следующий код Код (Text): //file- в данном случае имя файла, а не пути к exe файлу BOOL _proc_in_memory(char* file){ PROCESSENTRY32 proc; HANDLE snap; proc.dwSize = sizeof(PROCESSENTRY32); snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if(Process32First(snap,&proc)){ if (strcmp(proc.szExeFile,file)==0){MessageBox(0,"Файл найден!","PROC",0), //висит ли процесс //in memory? CloseHandle (snap);return TRUE;}} while(Process32Next(snap,&proc)) if (strcmp(proc.szExeFile,file)==0){MessageBox(0,"Процесс найден!","PROC",0); // висит ли //процесс in memory? CloseHandle (snap); return TRUE;} CloseHandle (snap); return FALSE;} А вот следующий код использует путь к модулю,тобишь *.dll: //file- в данном случае путь к dll BOOL _proc_in_memory(char* file){ MODULEENTRY32 mod; HANDLE snap; mod.dwSize = sizeof(MODULEENTRY32); snap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0); if(Module32First(snap,&mod)){ if (strcmp(mod.szExePath,file)==0){MessageBox(0,"Файл найден!","PROC",0), CloseHandle (snap);return TRUE;}} while(Module32Next(snap,&mod)) if (strcmp(mod.szExePath,file)==0){MessageBox(0,"Файл найден!","PROC",0); CloseHandle (snap); return TRUE;} CloseHandle (snap); return FALSE;}