2012-05-29 3 views
1

Можно создать дубликат:
How to effectively kill a process in C++ (Win32)?остановить внешнюю программу из C++ код


Я создаю программу, которая должна сделать важную задачу - и он может (редко) имеют конфликт ресурсов с другой программой (скажем, a.exe), которую пользователи могут непреднамеренно запустить.
Что бы я хотел сделать, это убить a.exe, если он запущен, прежде чем выполнять оставшуюся часть работы.
Есть ли способ остановить запуск другой программы/процесса из C++ (работает под Windows)?
Я надеялся, что может быть что-то в прекрасном усилии ...
Спасибо.

ответ

3

Если вы уверены, что имя изображения a.exe, то это очень просто:

system("taskkill /F /IM a.exe >nul 2>&1"); 
+0

+1: Выполняет ли то, что запросил ОП. Стоит иметь в виду, что это попытается убить все процессы, соответствующие a.exe. –

+0

Единственная проблема заключается в том, что 'taskkill.exe' не гарантированно будет оригинальным и может работать не так, как ожидалось. «TerminateProcess» будет лучше, если вам нужна эта гарантия. – chris

+0

В худшем случае моего последнего комментария будет запущен 'taskkill.exe', который находится в том же каталоге, что и программа, не зная его, и, возможно, предоставит ему admin (или даже за его пределами в зависимости от того, какая у вас есть ваша программа) делать то, что он хочет. – chris

1

Предполагаете, что вы работаете в Windows.

Вы можете использовать методы .NET. Я свяжу вам пост. https://stackoverflow.com/a/116098/1424790

Если вам нужно, я мог бы перевести сообщение на C++ (но мне нужно некоторое время для этого).

+0

Если есть что-то похожее на System.Diagnostics.Proccess.GetProcessesByName в C++, я хотел бы знать. Я хотел бы настроить мой процесс лучше (на самом деле его целевой папкой, но это, вероятно, слишком много), и в любом случае я бы не хотел получать ошибки, когда процесс не работает (я поймал все исключения, но я все еще получение сообщения об ошибке). – Thalia

1

Это зависит от того, если вы говорите о Windows, то вы можете использовать либо taskkill как уже было сказано, или вы можете использовать kernel32.dll's TerminateProcess метод.

Более подробная информация о том, что - http://msdn.microsoft.com/en-us/library/windows/desktop/ms686714(v=vs.85).aspx

Если вы на * NIX, это так просто, как с использованием POSIX kill метода нашел в signal.h.

Более подробную информацию о том, что - http://linux.die.net/man/2/kill упс, просто правильно прочитать вопрос, упоминая Окна