Configuração oculta do Windows 7 Task Scheduler não funciona

37

Eu tenho um processo daemon que executo na minha máquina a cada hora e, mesmo tendo marcado a Hiddencaixa, ele não funciona.Propriedades da tarefa

A cada hora, a tarefa é executada, mas mostra a janela de comando preta, na qual meu aplicativo .NET Console está sendo executado. Isso permanece visível até a tarefa ser concluída e depois desaparece. Isso é muito chato, porque aparece e interrompe o que estou fazendo:

insira a descrição da imagem aqui

Eu realmente quero escondê-lo, então como posso corrigir isso?

Joshua Frank
fonte
possível duplicata da janela Parar taskeng.exe de aparecer
Ƭᴇcʜιᴇ007
2
A pergunta vinculada não menciona a configuração Oculto .
BwDraco 22/09/12
@DragonLord Você está correto, mas é difícil saber se esta pergunta é "Por que o Hidden não funciona?" Ou se é realmente "Como faço para impedir que esta caixa seja exibida?".
precisa saber é o seguinte
@ techie007: A questão é como deixar a janela oculta, como pensei na caixa de seleção oculta. Mas esse artigo vinculado lida com scripts e o agendador de tarefas da linha de comando e scripts de shell, não a GUI do agendador de tarefas mostrada na minha postagem. Você sabe como usar a GUI para fazer isso?
27712 Joshua Frank
Na maioria dos casos, você não pode fazer isso apenas na GUI do Agendador de tarefas. Geralmente, você precisa modificar o que está sendo executado pela ação da tarefa (por exemplo: um arquivo ou script em lote) para ocultar a sub-janela que está sendo exibida. É isso que a outra pergunta aborda, e é por isso que eu a sinalizei como uma possível fraude. :)
Sepcʜιᴇ007

Respostas:

45

Marque a caixa de seleção "Executar se o usuário estiver conectado ou não" e o executável será executado em segundo plano.

Samambaia
fonte
4
Tão simples como isso. Esta resposta deve ser a aceita.
rolve
Obrigado. Eu tive o problema oposto. Eu queria que o console fosse exibido, mas não era!
Randy Stegbauer
12
Isso requer salvar a senha com a tarefa e interromperá ocultamente a próxima vez que a senha for alterada (o que geralmente é imposto pelas políticas de domínio nos ambientes corporativos).
Philipp Munin
@PhilippMunin Em certos casos de uso, você pode deixar de marcar a caixa de seleção 'Não armazenar senha. A tarefa terá acesso apenas aos recursos do computador local. ', O que impediria o fornecimento da senha.
Jimadine
20

Por que a tarefa agendada do Windows 7 está oculta? deve explicar por que isso acontece.

Além disso, esta descrição do TechNet de Propriedades gerais da tarefa indica:

As propriedades gerais de uma tarefa são exibidas na guia Geral da caixa de diálogo Propriedades da tarefa ou Criar tarefa. As propriedades gerais de uma tarefa incluem o nome da tarefa, autor, descrição, opções de segurança, o sistema operacional para o qual a tarefa está configurada e uma propriedade que controla se a tarefa está oculta .

Ao criar uma tarefa em uma pasta de tarefas, você deve nomear a tarefa. Duas tarefas não podem ter o mesmo nome se estiverem na mesma pasta de tarefas. A descrição da tarefa é opcional.

As opções de segurança da tarefa especificam o contexto de segurança em que a tarefa é executada. Para mais informações, consulte Contexto de segurança da tarefa.

Por padrão, tarefas ocultas não são mostradas na interface do usuário do Agendador de tarefas. Você pode visualizar tarefas ocultas quando Mostrar tarefas ocultas está selecionado no menu Exibir. Você torna uma tarefa oculta ao clicar na caixa de seleção Oculta na guia Geral da caixa de diálogo Propriedades da tarefa ou Criar tarefa.

Isso não implica que a caixa de seleção oculte apenas a tarefa da interface do usuário do agendador e não o programa real agendado?

Karan
fonte
Faz com que pareça assim, mas também não; Eu posso ver as tarefas no Agendador. Seria uma interface do usuário estranha que funcionasse com objetos que você não podia ver.
Joshua Frank
2
Você tem Mostrar tarefas ocultas marcadas no menu Exibir?
Karan
1
Ah, eu fiz, então isso explica. Obrigado. Obviamente, como "Oculto" não faz o que pensei, não preciso de tarefas ocultas. Como essa é uma ferramenta apenas para administradores, e como os administradores geralmente não gostam de ocultar coisas a eles, a que finalidade serve uma tarefa oculta?
Joshua Frank
2
Quem sabe, com certeza eu nunca usei essa opção. Sua pergunta foi a primeira vez que procurei para ver o que ela fazia. :) BTW, em vez de alterar o usuário para SYSTEM, selecionar "Executar com o usuário conectado ou não" resolve o problema?
21412 Karan
18

Ok, depois de mais algumas pesquisas, encontrei esta resposta no StackOverflow:

Para configurar uma tarefa agendada para execução em segundo plano, altere o usuário que está executando a tarefa para SYSTEM e nada aparecerá na tela.

Um comentário indica que isso concede direitos totais à tarefa, o que pode ser irritante, mas é aceitável neste caso.

Mas ainda assim, o que Hiddenfaz, se não faz isso? E por que a conta de usuário que está executando o programa tem alguma coisa a ver com se é visível?

Joshua Frank
fonte
Leia minha resposta acima, pode explicar o que faz.
21412 Karan
2
Esta resposta SU aborda a idéia de executá-lo como um usuário diferente para evitar ver a saída também. Eu não acho que exista algum motivo específico para executá-lo como "Sistema", você pode criar um usuário apenas para executar essa tarefa, com as permissões que você escolher para conceder a eles.
precisa saber é o seguinte
Mas por que o usuário configurado afetaria a visibilidade da janela?
27712 Joshua Frank
1
Lembre-se de que a SYSTEMconta não tem acesso aos arquivos criptografados EFS de outros usuários.
Zero3
11

A ÚLTIMA SOLUÇÃO

  • Alterar o usuário executando a tarefa para SYSTEM - executará seu comando que não está sob seu usuário
  • Verificar a opção "Executar se o usuário está conectado ou não" - requer salvar a senha com a tarefa e interromperá ocultamente a próxima vez que a senha for alterada (o que geralmente é imposto pelas políticas de domínio nos ambientes corporativos)

Se esses são os disjuntores para você, a solução definitiva é criar um arquivo de script JS como o abaixo, que executará seu comando na janela oculta, aguarde o final do comando e retorne o código de erro:

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

Salve como arquivo JS (myjob.js) e adicione ao seu agendador de tarefas: insira a descrição da imagem aqui Aprecie

Philipp Munin
fonte
Além disso, você deve usar o Wscript.exe para executar seu script, não o Cscript. Caso contrário, a janela preta do console poderá aparecer por um momento.
BBK 26/06
Aqui está outro exemplo de VBScript que está funcionando para mim: faqforge.com/windows/...
BBK
2

"Executar com o usuário conectado ou não" permitirá que a opção oculta funcione. Observe que você precisa fornecer suas credenciais depois de escolher isso.

Tran Viet Cuong
fonte
1

Ambos :

  • Alterando o usuário executando a tarefa para SYSTEM "
  • e verificando "Executar se o usuário está conectado ou não"

impedirá a janela de comando preta, mas fique atento às desvantagens: você não poderá trabalhar com algumas ferramentas de automação da GUI, como 'AutoIt' ou SendKeys no PowerShell, pois o Windows inicia as tarefas em um ambiente de estilo sem cabeça.

Gabriel Glenn
fonte
1

Deixo as configurações padrão e escrevo pequenos programas personalizados que geram a execução sem que seja exibida uma janela. Por exemplo, para executar um arquivo em lotes sem exibir uma janela do prompt de comando, use o código abaixo. Defina a tarefa para gerar "RunBatchFile.exe (path_to_batch_file)".

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}
AresAvatar
fonte
1
E eu suponho que a mágica que faz é oculta especificamente é devido à ProcessWindowStyle.Hiddenparte especificamente, correto? Vejo algo sobre isso aqui: msdn.microsoft.com/en-us/library/…
Pimp Juice IT
Sim, é isso que oculta a janela. Sem ele, a janela será exibida.
AresAvatar
1
Este código, conforme escrito, funcionará em qualquer coisa executada com ShellExecute.
AresAvatar
0

Eu estava tendo esse problema com tarefas agendadas do PowerShell (que estava implantando por meio do GPO). Acabei envolvendo-o em uma janela de comando:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
Berwin22
fonte
Embora isso possa responder à pergunta, seria uma resposta melhor se você pudesse fornecer alguma explicação para isso.
DavidPostill