как узнать что процесс полностью завершился

Тема в разделе "WASM.WIN32", создана пользователем nc, 17 июн 2007.

  1. nc

    nc New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2007
    Сообщения:
    61
    как узнать что процесс полностью завершился, и система сняла блокировку на чтение/запись с исполняемого файла;
    это делается при помощи мьютексов, или как-то ещё ?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    WaitForSingleObject() не подходит?
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Как менее правильный, но тоже вариант, можешь пытаться открывать файл на запись до тех пор, пока он не откроется
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Узнать - GetExitCodeProcess
    Ждать завершения - WaitForSingleObject
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    если вызвать ExitProcess с кодом STILL_ACTIVE, GetExitCodeProcess так и будет возвращать STILL_ACTIVE
     
  6. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    А может, кто знает ещё какой-нить способ? Мне как-то нужно было именно проверить, не завершился ли процесс - пришлось использовать GetExitCodeProcess, полагаясь на чужую программу.
     
  7. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    jmp topic_2
     
  8. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    MSoft
    Точно! Что-то я не догадался юзать с параметром dwMilliseconds = 0.
     
  9. ZX_CodeR

    ZX_CodeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2007
    Сообщения:
    48
    Следующий код
    Код (Text):
    1. //file- в данном случае имя файла, а не пути к exe файлу
    2. BOOL _proc_in_memory(char* file){
    3. PROCESSENTRY32 proc;
    4. HANDLE snap;  
    5. proc.dwSize = sizeof(PROCESSENTRY32);
    6.  
    7. snap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    8.  
    9. if(Process32First(snap,&proc)){
    10. if (strcmp(proc.szExeFile,file)==0){MessageBox(0,"Файл найден!","PROC",0), //висит ли процесс
    11. //in memory?
    12.  
    13. CloseHandle (snap);return TRUE;}}
    14.  
    15.  
    16. while(Process32Next(snap,&proc))
    17. if (strcmp(proc.szExeFile,file)==0){MessageBox(0,"Процесс найден!","PROC",0); // висит ли
    18.  //процесс in memory?
    19. CloseHandle (snap);
    20. return TRUE;}
    21. CloseHandle (snap);
    22. return FALSE;}
    23.  
    24. А вот следующий код использует путь к модулю,тобишь *.dll:
    25.  
    26. //file- в данном случае путь к dll
    27.  
    28. BOOL _proc_in_memory(char* file){
    29. MODULEENTRY32 mod;
    30. HANDLE snap;
    31. mod.dwSize = sizeof(MODULEENTRY32);
    32.  
    33. snap=CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,0);
    34.  
    35. if(Module32First(snap,&mod)){
    36. if (strcmp(mod.szExePath,file)==0){MessageBox(0,"Файл найден!","PROC",0),
    37. CloseHandle (snap);return TRUE;}}
    38.  
    39.  
    40. while(Module32Next(snap,&mod))
    41. if (strcmp(mod.szExePath,file)==0){MessageBox(0,"Файл найден!","PROC",0);
    42. CloseHandle (snap);
    43. return TRUE;}
    44. CloseHandle (snap);
    45. return FALSE;}
     
  10. nc

    nc New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2007
    Сообщения:
    61
    спасибо, превосходный код :)