Como fechar uma janela do navegador aberta por uma tarefa agendada no Windows

4

Eu tenho algumas tarefas agendadas que abrem o IE Windows em segundo plano para executar rotinas periódicas.

O problema é que, à medida que o dia passa, várias instâncias do IE são deixadas em execução no segundo plano e isso deixa menos memória livre para funcionar no servidor.

As tarefas são configuradas para parar e matar instâncias ainda em execução quando ele é iniciado e também são configuradas para matar instâncias em execução por mais de uma hora. Tudo isso parece não funcionar.

Eu tentei incluir um JavaScript window.close() na parte inferior da página, mas não funcionou. Eu suspeito que é por causa das configurações de segurança que pergunta ao usuário quando há scripts não interativos tentando fechar a janela.

P: Existe uma maneira de fechar essas janelas depois que elas funcionarem automaticamente?

Editar:

Estas são tarefas agendadas no Agendador de Tarefas do Windows que executa o Internet Explorer passando diretamente um URL para abrir.

    
por rcdmk 28.02.2014 / 20:09

4 respostas

1

O seguinte VBScript irá enumerar todas as janelas, encontrar aquelas que combinam com a URL que você gostaria de encontrar e depois fechar a aba / janela.

Set sa = CreateObject("Shell.Application")
Set windows = sa.Windows()

For Each window In sa.windows
    If left(window.LocationUrl, 5) <> "file:" Then
            ' logic for selecting windows goes here
            If InStr(window.locationUrl,"www.google.com") Then window.Quit()
            If UCase(window.locationUrl) = UCase("about:tabs") Then window.Quit()
    End If
Next

A seção If InStr pode ser usada para fazer uma pesquisa parcial de URL, enquanto o If UCase pode ser usado para comparação exata de string. Ajuste de acordo. Não deve ser muito difícil modificar o script para passar um arquivo de texto com uma lista de URLs para procurar e fechar as janelas encontradas.

Você pode testá-lo abrindo várias guias no IE, abrindo www.google.com e deixando outras em about:Tabs , executando o script e observando enquanto as guias / janelas fecham.

Este script é baseado em um encontrado aqui .

    
por 28.02.2014 / 22:44
1

Não é uma resposta completa, mas algo com o qual você pode trabalhar ...

Agende uma nova Tarefa e use-a para disparar a TaskKill do Windows e matar todos os processos com o nome da imagem "iexplorer.exe" que estão em execução há mais de uma hora:

Algo como taskkill /F /IM iexplore.exe /FI "CPUTIME gt 1:00:00" .

    
por 28.02.2014 / 22:45
1

Minha solução é abrir o navegador e fechá-lo imediatamente após a execução, mas os scripts chamados devem ser modificados para que a execução não seja finalizada fechando o navegador.

Para fazer isso, no PHP, você pode adicionar isso no topo do seu script, então o status do navegador não tem efeito no estado de execução do PHP:

// So execution is triggered but can be aborted by closing the browser
ignore_user_abort(true); 
// Even if closing browser has no more effect, time limit should be set to 
set_time_limit(300); 

Em seguida, em um lote de janelas agendadas, você pode fazer

REM Call it
START http://.../mycode.php
REM Wait a little
ping 127.0.0.1 -n 6 > nul
REM Kill Them All
TASKKILL /F /IM iexplore.exe
    
por 06.09.2016 / 10:04
0

Que tipo de tarefa agendada? Você está invocando iexplore.exe diretamente, ou você está gerando em VBScript ou algo assim?

Se você está gerando em VBScript, você precisa liberar explicitamente o objeto ActiveX do servidor COM no seu código vbscript antes que o script saia, Set it to Nothing .

Se não ...

Este é um kluge (uma solução inteligente que não resolve a raiz do problema, mas o faz de qualquer maneira), mas ...

  • Escreva um programa em sua linguagem de programação favorita que gera o processo que faz o seu IE, controla o ID do processo na memória e o mata sempre que alguma "condição de saída" é atingida. Você então apenas tem que sinalizar de alguma forma para o ambiente (escrevendo para um arquivo, enviando uma mensagem IPC, ou algo parecido) de dentro do IE que o seu processamento é feito, então o processo externo sabe matar o IE. Em seguida, no processo externo, use a chamada do sistema TerminateProcess() para fechar forçosamente o IE. Ele fechará com certeza, a menos que esteja aguardando um thread do kernel travado, o que provavelmente seria devido a um mau funcionamento do driver de dispositivo.
por 28.02.2014 / 20:21