comando taskkill matando apenas o explorador de arquivos aberto usando subprocess.Popen ()

0

Eu abri duas instâncias da pasta D:\akshit . Um eu abri manualmente usando GUI. Mas o outro, eu criei com um script que chama subprocess.Popen() . Agora, sempre que escrevo o seguinte comando, apenas a instância aberta usando subprocess.Popen() está sendo eliminada:

TASKKILL /F /FI "WINDOWTITLE eq akshit" /IM explorer.exe

Alguém pode explicar com que base o taskkill decide não matar as outras instâncias? Posso de alguma forma alterar esse comportamento para matar todas as instâncias com o título da janela "akshit"?

    
por akshit bhatia 22.05.2018 / 13:04

1 resposta

1

Não é culpa do TaskKill. Enquanto você abriu duas janelas do Gerenciador de Arquivos, isso não significa necessariamente que você abriu dois processos separados para cada um.

Uma das configurações que podem afetar sua situação pode ser encontrada em:

Opções de pasta → guia Visualizar → Configurações avançadas → "Iniciar janelas de pastas em um processo separado"

Esta configuração tem os seguintes efeitos:

  • Se esta caixa de seleção não for verificada, na maioria das vezes, as janelas do Gerenciador de Arquivos são abertas no mesmo processo explorer.exe que hospeda a barra de tarefas e o menu Iniciar. O título da janela deste processo é fixo. Se você matar esse processo, todo o shell do Windows desaparecerá.
  • Se esta caixa de seleção estiver marcada, o processo que hospeda a barra de tarefas e o menu Iniciar é sempre separado do processo que hospeda suas janelas do Gerenciador de Arquivos. Mas ainda assim, isso não significa que você obtenha um processo explorer.exe separado para cada janela do Gerenciador de Arquivos. Eu testei isso no Windows Server 2008 R2 e Windows 10 1709. Eu sempre recebo exatamente um explorer.exe processo para todas as minhas janelas do Gerenciador de Arquivos e uma outra explorer.exe para minha barra de tarefas e menu Iniciar. O WINDOWTITLE desse processo é sempre o título da janela do Explorador de Arquivos que foi aberta por último.

Um motivo pelo qual o subprocess.Popen() abre um processo separado do File Explorer pode ser que você esteja executando um Python de 32 bits em um computador de 64 bits; nesse caso, subprocess.Popen() apenas abre um explorer.exe de 32 bits. (Isso não acontece em todas as versões do Windows, mas, novamente, você não especificou nenhuma.) Outro motivo é a chamada DCOM fora do processo que sempre me engana.

Mas a essência disso é:

  • Janela ≠ Processo
por 22.05.2018 / 13:41