Como usar o TASKKILL para aplicativos de 32 bits no ambiente Windows de 64 bits?

0

Quando um usuário inicia um aplicativo .Net de 32 bits em um ambiente de 64 bits, ele é exibido no gerenciador de tarefas com um nome diferente.

Por exemplo, se o nome do meu aplicativo for Shipnet.Shell.exe , no gerenciador de tarefas, ele exibirá SH7910~1.exe*32 . Devido a essa mudança de nome, a execução do comando TASKKILL falha.

Como posso obter o nome correto para usar com o TASKKILL?

Alguns antecedentes:

Estamos tendo um produto legado desenvolvido no Centura Team Developer 4.2 (Gupta Sql Windows). De nosso produto legado, podemos invocar aplicativos .Net de 32 bits. Meu produto é muito grande e tem centenas de aplicativos desenvolvidos no Centura e no .Net. O usuário pode iniciar vários aplicativos no menu principal (Centura e .Net). Há um menu Logout na tela do menu principal. Quando o usuário clicar nesse menu, nosso produto fecha todos os aplicativos Centura e .Net. O Centura cuida da sua própria aplicação no processo de fechamento. Estamos usando o comando TASKKILL para fechar todos os aplicativos .Net lançados do nosso produto. Isso está funcionando bem com o ambiente de 32 bits do Windows. Quando implantamos o mesmo no ambiente Windows de 64 bits, nosso produto não consegue fechar os aplicativos .Net. O motivo é o comando TASKKILL não conseguir obter o nome correto do aplicativo.

    
por Manimaran 14.08.2013 / 11:58

2 respostas

4

Você pode usar TASKLIST para obter o PID por título da janela, nome do processo ou outro critério como este:

tasklist /FI "WINDOWTITLE eq notepad"

Isto listará todos os processos em que o nome da janela é igual a "bloco de notas".

Exemplo de saída:

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

Os filtros disponíveis são:

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

Então você pode usar taskkill e fornecer o PID.

TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

/t finaliza os processos e seus filhos, /PID especifica o ID do processo.

Se você tiver o powershell disponível, poderá usar Stop-Process <pid> (por exemplo, Stop-Process 3512 ) ou Stop-Process -processname notepad

Mais informações estão disponíveis aqui no comando Stop-Process.

Seria muito útil se você fornecesse o nome do SO no qual você encontrou o problema, é altamente incomum que os nomes sejam truncados para o DOS-STYLE em sistemas operacionais de 64 bits!

    
por 14.08.2013 / 12:28
0

Eu tenho um problema semelhante aqui. Um processo de 32 bits se recusa a morrer. Eu o encontraria com a lista de tarefas no processo 8152. Estas são as próximas etapas:

C:\Users\Smurf>taskkill /pid 8152 /t ERROR: The process with PID 8152 (child process of PID 7788) could not be terminated. Reason: Toegang geweigerd.

C:\Users\Smurf>taskkill /pid 7788 /t ERROR: The process "7788" not found.

Toegand geweigerd é "acesso não permitido". Eu me dei tudo certo para o processo no ProcExp. Eu me pergunto como matar esse processo indesejado ...

    
por 27.03.2014 / 20:06