|
|
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Необходимо определить запущен ли процесс, зная его "Путь к образу" (как это названо в Диспетчере Задач), то есть полный путь к файлу, например: C:\Windows\System32\calc.exe Мне известен такой способ: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Но тут проблема в том что сравнивается с TProcessEntry32.szExeFile, а оно содержит только имя файла, без пути (во всяком случае у меня на Win7). Можно конечно впендюрить ExtractFileName(), но представим что у нас есть "calc.exe" в нескольких папках - и проверка будет работать некорректно. Подскажите что-нибудь? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 11:42:22 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Q640Подскажите что-нибудь? Мсдн молчит? https://msdn.microsoft.com/en-us/library/windows/desktop/ms684839(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 11:46:26 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
оу... Спасибо... Значит что теперь имеется? * Использовать Module32First/Module32Next вместо Process32First/Process32Next * QueryFullProcessImageName * GetModuleFileNameEx * GetProcessImageFileName гм... И какой же "лучше"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 11:58:27 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
20.07.2017 11:42, Q640 пишет: > Необходимо определить запущен ли процесс, зная его "Путь к образу" зачем? какова цель? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 13:20:52 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. а затем: QueryFullProcessImageName ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 15:21:09 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 15:23:54 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Это как бы и есть цель. Есть полный путь к чужому exe. Надо узнать условно грубо говоря "работает" он или нет. Пока без подсчёта количества экземпляров, просто "есть ли хоть один такой процесс". А чего, через CreateToolhelp32Snapshot() не все процессы найдутся? Или почему-то другому не рекомендуете? Спасибо большое, будем попробовать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.07.2017, 19:09:38 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Q640А чего, через CreateToolhelp32Snapshot() не все процессы найдутся? Или почему-то другому не рекомендуете? Каких-либо религиозных предпочтений нет - главное чтобы работало. Это я дернул из куска моего кода, а там было через EnumProcesses. И EnumProcesses немного побыстрей работает (дергает из системы меньше инфы, поэтому накладные расходы меньше). EnumProcesses() vs CreateToolhelp32Snapshot() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2017, 05:15:26 |
|
||
|
Проверка наличия запущенного процесса по полному "пути к образу"
|
|||
|---|---|---|---|
|
#18+
Вот вам волшебная функция для определения полного пути по PID процесса. Просто добавьте это в свой код. Но только помните, что в 64-битной системе всегда используйте 64-битную версию вашего ПО, т.к. 32-битная программа не может определять полный путь к 64-битным процессам (в противном случае используйте QueryFullProcessImageName, но эта шняга не работает в XP и 2003, так что лучше способ выше). Если выполнять эти условия по битности, то это самая надежная функция определения полного пути, никогда не подводила от XP до Windows 10. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. Вызывать так Перед вашей функцией нужно добавить вызов (чтобы мы смогли получать полные пути к системным сервисам и службам): Код: pascal 1. а в саму вашу функцию добавить вот такое получение пути по PID ну и далее сравнение сами допишете, если искомый путь и путь определенный для PID совпадает, значит процесс запущен: Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2017, 05:46:35 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39492634&tid=2041984]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 377ms |

| 0 / 0 |
