Когда пользователь запускает 32-разрядное приложение .Net в 64-разрядной среде, в диспетчере задач оно отображается с другим именем.
Например, если мое приложение называется Shipnet.Shell.exe
, в диспетчере задач оно отображается SH7910~1.exe*32
. Из-за этого изменения имени выполнение команды TASKKILL завершается неудачно.
Как я могу получить правильное имя для использования с TASKKILL?
Немного предыстории:
У нас есть устаревший продукт, разработанный в Centura Team Developer 4.2 (Gupta Sql Windows). Из нашего старого продукта мы можем использовать 32-битные .Net приложения. Мой продукт очень большой и имеет сотни приложений, разработанных в Centura и .Net. Пользователь может запустить несколько приложений из главного меню (Centura и .Net). На экране главного меню есть меню «Выход». Когда пользователь нажимает на это меню, наш продукт закрывает все приложения Centura и .Net. Centura позаботится о собственном приложении в процессе закрытия. Мы используем команду TASKKILL, чтобы закрыть все .Net приложения, запущенные из нашего продукта. Это нормально работает с 32-битной средой Windows. Когда мы внедряем то же самое в 64-битной среде Windows, наш продукт не может закрыть приложения .Net. Причина в том, что команда TASKKILL не смогла получить правильное имя приложения.
источник
Ответы:
Вы можете использовать,
TASKLIST
чтобы получить PID по заголовку окна, имени процесса или другим критериям:tasklist /FI "WINDOWTITLE eq notepad"
Это перечислит все процессы, для которых имя окна равно «блокнот».
Пример вывода:
Доступные фильтры:
Затем вы можете использовать
taskkill
и предоставить PID.TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
/t
завершает процессы и их дочерние элементы,/PID
указывает идентификатор процесса.Если у вас есть PowerShell, вы можете использовать
Stop-Process <pid>
(напримерStop-Process 3512
) илиStop-Process -processname notepad
Более подробная информация доступна здесь по команде Stop-Process.
Было бы очень полезно, если бы вы указали имя ОС, в которой вы столкнулись с проблемой, очень необычно, что имена усекаются до DOS-STYLE в 64-битных операционных системах!
источник
У меня здесь похожая проблема. 32-битный процесс отказывается умирать. Я нашел бы это с помощью списка задач в процессе 8152. Это следующие шаги:
Toegand geweigerd - это «доступ запрещен». Я дал себе все права, поэтому процесс в ProcExp. Интересно, как убить этот нежелательный процесс ....
источник