Я пытаюсь получить дескриптор файла любого запущенного процесса на C++. Это мой код:Как получить дескриптор файла процесса?
#include <windows.h>
#include <process.h>
#include <Tlhelp32.h>
#include <winbase.h>
#include <string.h>
void killProcessByName(const char *filename)
{
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL);
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof (pEntry);
BOOL hRes = Process32First(hSnapShot, &pEntry);
while (hRes)
{
if (strcmp(pEntry.szExeFile, filename) == 0)
{
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0,
(DWORD) pEntry.th32ProcessID);
if (hProcess != NULL)
{
CloseHandle(hProcess);
}
}
hRes = Process32Next(hSnapShot, &pEntry);
}
CloseHandle(hSnapShot);
}
int main()
{
killProcessByName("WINWORD.EXE");
return 0;
}
код работает нормально, но требуется ручка не получает освобожден. Есть ли какая-то проблема в сравнении (strcmp
) часть? Или есть что-то еще, что я делаю неправильно?
Что значит «ручка не освобождается»? Что означает «выпущенный» в этом контексте. Вы открываете процесс, затем снова закрываете ручку. Это должно освободить дескриптор - какими средствами вы определяете, что что-то не выпущено? Или вы просто ожидаете, что ваш OpenProcess каким-то образом сделает что-то большее, чем даст вам обратную ссылку для этого процесса - например. что он имеет тот же эффект, что и «TerminateProcess (handle)»? –
Отпустив, я обращаюсь к * CloseHandle *. Этот дескриптор не освобождается/закрыт. В моем файле все еще есть активный дескриптор, и я не могу его удалить или переименовать. & yes Я не ожидаю, что Openprocess() сделает что-то вроде: terminateprocess(). Я знаю, что он должен вернуть мне ручку. , но проблема в моей программе errs на strcmp. Почему это так ? – user2518829
«errs at strcmp» означает именно то, что? И «CloseHandle» здесь просто закрывает дескриптор, который вы только что открыли с помощью «OpenProcess», он не позволит вам, например, переименовать файл .exe, который в настоящее время запущен, - ОС держит этот файл открытым до тех пор, пока он не выйдет - нет внешнего манипуляция изменит это. –