Я хочу выполнить taskkill
из cmd в коде C++. Я пробовал две формы:
system("taskkill /IM 'example.exe' /F");
system("runas / profile / user:administrator \"taskkill /IM 'exmaple.exe' /F\"");
Также моя программа на С++ запускалась от имени администратора. Но ни одна из этих команд не выполнена успешно. В чем проблема?
Попробуйте удалить одинарные кавычки вокруг файла example.exe: 'example.exe'
-> example.exe
.
Вы пробовали запускать эти команды напрямую и смотреть, работают ли они?
Я имею в виду, что если вы используете API, вы сможете получить гораздо более точную информацию об ошибках и причинах сбоя.
@wohlstand Спасибо, но результат не изменился.
@chris Это было успешно
@sh.sagheb это странно. Я запустил notepad.exe и попробовал (в терминале cmd.exe): taskkill /IM 'notepad.exe' /F
и получил ERROR: The process "'notepad.exe'" not found.
. Затем я попробовал taskkill /IM notepad.exe /F
и у меня получилось (получил: SUCCESS: The process "notepad.exe" with PID ... has been terminated.
). Это также сработало, когда я заключил notepad.exe в двойные кавычки ("
). Но не в одинарных кавычках ('
).
Немедленным решением может быть удаление одинарных кавычек ('
), заключающих example.exe
.
Например. вместо:
system("taskkill /IM 'example.exe' /F");
Использовать:
system("taskkill /IM example.exe /F");
Использование двойных кавычек ("
- в данном случае экранировано с помощью \
) также допустимо:
system("taskkill /IM \"example.exe\" /F");
Однако -
Как прокомментировал выше @PepijnKramer, вы можете использовать специальные функции Windows API, чтобы сделать то же самое.
Это требует немного больше кода, но предлагает гораздо лучший контроль и обратную связь об ошибках.
Вот схема того, что вам нужно сделать:
PROCESS_TERMINATE
правами доступа (см. ниже).Пример получения PID, а затем дескриптора процесса по его имени: Как я могу получить дескриптор процесса по его имени на C++?.
Дескриптор должен иметь право доступа PROCESS_TERMINATE.
(это должно быть передано в OpenProcess
через параметр dwDesiredAccess
).
Почему вы используете систему? Для этого в Windows есть метод API: learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/… .