Как я могу убить процесс на основе номера версии его .EXE файла? - PullRequest
2 голосов
/ 09 июля 2009

Я хочу найти процесс, который принадлежит .EXE-файлу с определенным номером версии файла, и уничтожить его. Как я могу это сделать?

Я работаю с Delphi, но любая общая помощь будет признательна.

Ответы [ 3 ]

12 голосов
/ 10 июля 2009

Вы не можете "убить файл, только заглянув внутрь версии". Вы можете убить процесс, если у вас есть ручка для него. Существует два распространенных способа получить дескриптор процесса:

  1. Используйте дескриптор, который вы получили, когда начали процесс с CreateProcess.
  2. Получить дескриптор уже запущенного процесса с помощью OpenProcess.

Полагаю, вы не начали процесс самостоятельно, поэтому вам нужно будет использовать OpenProcess.

Тогда проблема переходит к выбору, какой процесс попытаться открыть. OpenProcess требуется идентификатор процесса, и есть несколько способов получить один из них, в зависимости от того, какая другая информация у вас уже есть о процессе.

  • Если у вас есть дескриптор окна, который принадлежит процессу, используйте GetWindowThreadProcessID.
  • Если вам известно имя EXE-файла процесса, используйте CreateToolhelp32Snapshot, а затем Process32First и Process32Next для проверки каждого процесса пока не найдете тот, который соответствует.
  • Если вам известно только имя окна, используйте FindWindow или EnumWindows, чтобы получить дескриптор окна, а затем используйте первый метод.

Если вас беспокоит номер версии EXE-файла, рассмотрите возможность использования второго метода, но прежде чем выбрать процесс, откройте EXE-файл и проверьте его содержимое. Это довольно отличная задача от уничтожения процесса, поэтому, если у вас возникли проблемы с ним, вы должны задать об этом отдельный вопрос.

Получив дескриптор процесса, который вас интересует, вы можете убить его с помощью TerminateProcess. Пожалуйста, обратите внимание на предупреждения в документации для этой функции; это не чистое отключение процесса на любом отрезке.

Наконец, будьте осторожны, чтобы увидеть разницу между дескрипторами окна и дескрипторами процесса. Они не являются взаимозаменяемыми. Используйте тип HWnd, когда вы хотите держать дескриптор окна; THandle для ручек процесса.

0 голосов
/ 09 июля 2009

Вы можете убить задачу по имени процесса, например так:

taskkill /im MyProcess.exe /f

Но звучит так, будто вы хотите убить его на основании номера версии файла. Это правильно?

0 голосов
/ 09 июля 2009

попробуйте и используйте команду taskkill, у нее больше контроля над тем, что фильтровать.

Кроме того, ваш вопрос очень запутанный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...