Pare de aparecer a janela taskeng.exe


18

Tenho vários processos agendados no meu ambiente Windows 7, principalmente para backups, que devem ser executados em segundo plano.

No entanto, em vez de apenas fazer seu trabalho silenciosamente em segundo plano, o agendador de tarefas exibe uma janela preta (do tipo console) taskeng.exe. A janela fica na frente de todas as outras janelas. Felizmente, isso não rouba meu foco no teclado, mas bloqueia a visão de tudo.

taskeng.exe

Existe uma maneira de evitar essa janela - ou pelo menos aparecer em segundo plano sem roubar meu foco VISUAL?

Exemplo editado após a recompensa aplicada:

Aqui está minha última tentativa de usar o material WScript (em um arquivo chamado RunSignatured.bat):

Set Shell = CreateObject("WScript.Shell")
Shell.Run C:\Users\danh\Bin\signatured.bat, 0, False

O arquivo signatured.bat contém:

cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature

Estou procurando uma solução para esse problema que funcione no Vista SP2 sem instalar outras ferramentas e execute um aplicativo Java simples (mas com execução contínua no timer) do Agendador de tarefas. Eu costumava ter isso funcionando de alguma forma antes da minha instalação ser manguizada, mas não consigo descobrir como fazê-lo agora que restaurei (mais ou menos) minha caixa. (Eu não tenha obtido o esquema WshShell ao trabalho - o arquivo bat-alvo aparentemente nunca funciona (ou é morto imediatamente por algum motivo).)
Daniel R Hicks

(O programa Java tem seu próprio loop temporizador interno, o que significa que continua a ser executado depois que começou.)
Daniel R Hicks

@DanielRHicks, confira esta solução SU, pois pode ajudá-lo.
avirk

Você pode fornecer o comando real sendo executado pela tarefa?
precisa saber é o seguinte

@ techie007 - Veja acima, depois que a edição for aprovada.
Daniel R Hicks

Respostas:


8

Mais especificamente à recompensa / exemplo de Daniel R Hicks, mas acho que ainda pode ser aplicada ao problema original:

Se for um arquivo em lote sendo iniciado a partir do Agendador de Tarefas, em vez de apenas iniciar o arquivo em lote minimizado / invisível, você provavelmente também precisará modificar o arquivo em lote para executar seus comandos de forma invisível.

Então mude:

cd C:\Users\danh\bin
"C:\Program Files\Java\jre7\bin\java.exe" Signature

Para algo como:

cd C:\Users\danh\bin
start /b "C:\Program Files\Java\jre7\bin\java.exe" Signature

Ou talvez elimine o arquivo em lotes completamente e faça tudo do script (VBS) que você está iniciando diretamente no Agendador de tarefas.

Algo como:

Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin" 
Shell.Run "C:\Program Files\Java\jre7\bin\java.exe Signature", 0, False

Solução implementada por DanH, em resposta às sugestões de techie007, satisfazendo a recompensa:

Um arquivo, chamado RunSignatured.vbs, contendo:

Set Shell = CreateObject("WScript.Shell")
Shell.CurrentDirectory = "C:\Users\danh\bin" 
Shell.Run "java.exe Signature", 0, False

Observe que o exposto acima depende do java.exe estar no caminho, pois a técnica não funciona com o espaço em branco em Arquivos de programas ao especificar um caminho completo. Não há dúvida de outras maneiras de contornar esse problema, mas isso é para outras pessoas descobrirem.

Em seguida, adicione RunSignature.vbscomo o nome "programa / script" em "Ação" no Agendador de tarefas.


1
Tentei inúmeras variações da start /babordagem. Nada parecia eliminar a janela - acho que ela foi criada quando você começou a executar o arquivo bat, então já é tarde demais.
Daniel R Hicks

Para a segunda abordagem, quando tento executá-lo diretamente (clicando duas vezes no arquivo), recebo "Linha: 3 Erro: O sistema não consegue encontrar o arquivo especificado".
Daniel R Hicks

Esse foi um exemplo, código não totalmente testado. ;) O java.exe existe no caminho fornecido? Talvez teste com o lançamento de algo simples como "notepad.exe", pois o java.exe pode ter algumas peculiaridades estranhas às vezes.
precisa saber é o seguinte

(Observe o problema com o espaço em branco no nome do caminho - não está claro como lidar com isso.)
Daniel R Hicks

(Mas remover o caminho parece trabalho Aparentemente! javaEstá fazendo através no caminho de procura OK.)
Daniel R Hicks

4

Você pode executar as tarefas agendadas como um usuário diferente, para que elas não interajam com a área de trabalho interativa da sua conta normal. Isso certamente parece funcionar nos servidores Windows2003 que eu administro. Apenas tome cuidado para garantir que as permissões de arquivo e outros detalhes de autenticação estejam definidos, para que as tarefas possam acessar o que precisam quando estão como usuários diferentes.

Editar: ou, em vez de executar uma ferramenta de console diretamente, você pode ter um pequeno script que a executa usando o WScript.Shell.Run com a opção "minimizar, sem alteração de foco":

' sample script: c:\scripts\test.vbs
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "c:\location\of\tool\utility.exe", 7

em seguida, execute isso com o agendador de tarefas (a linha de comando é algo parecido wscript c:\scripts\test.vbs) em vez de chamar a ferramenta diretamente. Você também pode chamar arquivos em lote e outros scripts dessa maneira. Há também uma opção "ocultar completamente" (substitua os 7 acima por 0), embora em ambos os casos o ocultar / minimizar controle apenas a janela inicial: se a ferramenta abrir mais a si mesma, eles ainda poderão roubar o foco como antes.

Consulte http://msdn.microsoft.com/en-us/library/d5fk67ky%28VS.85%29.aspx para obter uma lista completa de opções para o método run.


Receio que isso não seja possível porque preciso das minhas credenciais kerberos para algumas das tarefas.
BlaM

Você pode tentar executar a tarefa indiretamente e usar o método run do host de script do Windows, que permite algum controle de como a janela inicial de uma tarefa é apresentada. Veja editar.
David Spillett

Pergunta semelhante, com a mesma resposta para usar um vbs: serverfault.com/questions/9038/…
Anthony Hatzopoulos

3

Tente executar sua tarefa agendada assim:

C: \ Windows \ System32 \ cmd.exe / c start /bc:\fullpath\mybackup.bat

O start /bdeve iniciar o aplicativo sem criar uma nova janela.

Se isso não funcionar, você poderá criar um script AutoIt independente que oculte a janela taskeng.exe. Os scripts AutoIt podem ser compilados em um .exe.

O .exe seria a primeira linha do seu arquivo mybackup.bat. O código AutoIt ficaria assim:

WinSetState ("taskeng", @SW_HIDE)

1
Não parece funcionar.
Daniel R Hicks

1
Finalmente uma solução que funcionou para mim! Mas somente após uma reinicialização.
Fabian Röling

btw, em vez de executar c: \ Windows \ System32 \ cmd.exe, você pode simplesmente executar% COMSPEC%, definido como o interpretador de prompt de comando usado. Para mais informações, consulte: en.wikipedia.org/wiki/COMSPEC
Brent Rittenhouse


2

A maneira mais simples de ocultar um aplicativo iniciado a partir do Agendador de Tarefas é configurá-lo para "Executar se o usuário estiver conectado ou não". Essa configuração pode ser encontrada na guia Geral das propriedades da tarefa agendada.


1

Aqui está o script SyncToy que eu uso. Observe as várias aspas no local do arquivo:

' SyncToy Scheduler
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run """C:\Program Files\SyncToy 2.1\SyncToyCmd.exe"" -R" ,7

0

Aparentemente, você instalou o SQLyog MySQL GUI , que agendou a execução do SQLyog Job Agent . Parece que é um aplicativo de console que não tenta se esconder.

Você deve procurar no Agendador de tarefas uma tarefa referente ao SQLyog e corrigir sua entrada. Se for uma chamada de cmd, tente adicionar /bà lista de parâmetros. Se for apenas uma chamada para um executável, você poderá corrigi-lo tendo em vista esta resposta minha .

Se você tiver problemas para localizar essa entrada, use autoruns para descobrir como o SQLyog é iniciado. Você também pode usar o regedit para procurar todas as menções ao SQLyog ou qualquer que seja o nome do diretório de instalação.

É claro que você também pode desinstalar a GUI do SQLyog MySQL, se não precisar.

Se você não instalou o SQLyog MySQL GUI, seu computador poderá estar infectado. Você pode usar o Process Monitor para verificar quando o pop-up aparece, para ver se é o taskeng.exe do system32 ou um dos Semelhantes do Taskeng.exe .


Já postado em outra resposta, parece não funcionar .
Tamara Wijsman

@ TomWijsman: Se você se referir à parte "/ b", eu a incluí apenas por completo.
harrymc 22/09/12

0

Eu estava tendo o problema exato usando o SQLyog depois de fazer algumas pesquisas. Corrigi-o criando um arquivo chamado invisible.vbse inserindo este código:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.CurrentDirectory = "C:\Program Files (x86)\SQLyog\"
WshShell.Run "SJA.exe C:\Users\REPLACE_UR_USER\Desktop\test.xml -lC:\Users\REPLACE_UR_USER\AppData\Roaming\SQLyog\sja.log -sC:\Users\REPLACE_UR_USER\AppData\Roaming\SQLyog\sjasession.xml ", 0

Do que criar um Agendador de Tarefas para executar o invisible.vbsarquivo e pronto!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.