Как эффективно уничтожить процесс в C++ (Win32)?

Я в настоящее время пишу очень легкую программу, таким образом, я должен использовать C++, так как он не связывается с платформой.NET, которая решительно увеличивает размер программы.

Я должен быть в состоянии завершить процесс, и сделать это я должен получить дескриптор процесса. Unfortuanately, который я не изобразил, как сделать это все же.

P.S. Я знаю, что для уничтожения процесса необходимо использовать TerminateProcess.

15
задан Kristina Brooks 16 December 2009 в 18:24
поделиться

4 ответа

PID, необходимый для OpenProcess (), обычно нелегко получить. Если все, что у вас есть, это имя процесса, вам нужно перебрать запущенные процессы на машине. Сделайте это с помощью CreateToolhelp32Snapshot, затем Process32First и выполните цикл с Process32Next. PROCESSENTRY32.szExeFile дает вам имя процесса (не путь!), Th32ProcessID дает вам PID.

Следующее соображение заключается в том, что процесс может появляться более одного раза. И есть вероятность, что одно и то же имя процесса используется для очень разных программ. Вроде «Настройка». Если вы не хотите просто убить их всех, вам нужно попытаться получить от них некоторую информацию о времени выполнения. Возможно, текст строки заголовка окна. GetProcessImageFileName () может указать путь к .exe. Он использует собственный формат ядра, вы Мне потребуется QueryDosDevice для сопоставления имени дискового устройства с буквой диска.

Следующее соображение - это права, которые вы запрашиваете в OpenProcess (). Вы вряд ли получите PROCESS_ALL_ACCESS , все, что вам нужно, это PROCESS_TERMINATE . Хотя это тоже привилегия. Убедитесь, что учетная запись, которую вы используете для запуска программы, может получить это право.

16
ответ дан 1 December 2019 в 00:26
поделиться
HANDLE explorer;
explorer = OpenProcess(PROCESS_ALL_ACCESS,false,2120);
TerminateProcess(explorer,1);

That worked

8
ответ дан 1 December 2019 в 00:26
поделиться

CreateProcess и OpenProcess возвращают дескрипторы процесса.

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

1
ответ дан 1 December 2019 в 00:26
поделиться

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

]
5
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: