Когда пользователь запускает 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 не смогла получить правильное имя приложения.

2 ответа2

4

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

tasklist /FI "WINDOWTITLE eq notepad"

Это перечислит все процессы, для которых имя окна равно "блокнот".

Пример вывода:

C:\windows\system32>tasklist /FI "WINDOWTITLE eq Untitled - Notepad"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
notepad.exe                   1876 Console                    1      7,156 K

Доступные фильтры:

Filters:
    Filter Name     Valid Operators           Valid Value(s)
    -----------     ---------------           --------------------------
    STATUS          eq, ne                    RUNNING |
                                              NOT RESPONDING | UNKNOWN
    IMAGENAME       eq, ne                    Image name
    PID             eq, ne, gt, lt, ge, le    PID value
    SESSION         eq, ne, gt, lt, ge, le    Session number
    SESSIONNAME     eq, ne                    Session name
    CPUTIME         eq, ne, gt, lt, ge, le    CPU time in the format
                                              of hh:mm:ss.
                                              hh - hours,
                                              mm - minutes, ss - seconds
    MEMUSAGE        eq, ne, gt, lt, ge, le    Memory usage in KB
    USERNAME        eq, ne                    User name in [domain\]user
                                              format
    SERVICES        eq, ne                    Service name
    WINDOWTITLE     eq, ne                    Window title
    MODULES         eq, ne                    DLL name

Затем вы можете использовать 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-битных операционных системах!

0

У меня здесь похожая проблема. 32-битный процесс отказывается умирать. Я нашел бы это с помощью списка задач в процессе 8152. Это следующие шаги:

C:\Users\Smurf> taskkill /pid 8152 /t ОШИБКА: не удалось завершить процесс с PID 8152 (дочерний процесс с PID 7788). Причина: Тоганг Гевейгерд.

C:\Users\Smurf> taskkill /pid 7788 /t ОШИБКА: процесс "7788" не найден.

Toegand geweigerd - это "доступ запрещен". Я дал себе все права, поэтому процесс в ProcExp. Интересно, как убить этот нежелательный процесс ....

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .