A configuração oculta do Agendador de Tarefas do Windows 7 não funciona

32

Eu tenho um processo daemon que executo na minha máquina a cada hora, e mesmo que eu tenha verificado a caixa Hidden , ele não funciona.

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é que a tarefa seja concluída e, em seguida, desaparece. Isso é muito chato, porque aparece e interrompe o que eu estou fazendo:

Eu realmente quero ocultá-lo, então como posso corrigir isso?

    
por Joshua Frank 21.09.2012 / 20:29

8 respostas

18

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

To setup a Scheduled Task to run in background, change the User running the task to SYSTEM, and nothing will appear on your screen.

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

Mas ainda assim, o que Hidden faz, se não fizer isso? E por que a conta de usuário que está executando o programa tem algo a ver com a visibilidade?

    
por 21.09.2012 / 20:55
39

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

    
por 23.05.2013 / 03:22
17

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

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

The general properties of a task are displayed on the General tab of the Task Properties or Create Task dialog box. The general properties of a task include the task name, author, description, security options, the operating system that the task is configured for, and a property that controls whether the task is hidden.

When you create a task in a task folder, you must name the task. No two tasks can have the same name if they are in the same task folder. The task description is optional.

Task security options specify the security context that the task runs under. For more information, see Task Security Context.

By default, hidden tasks are not shown in the Task Scheduler user interface. You can view hidden tasks when Show Hidden Tasks is selected in the View menu. You make a task hidden when you click the Hidden check box on the General tab of the Task Properties or Create Task dialog box.

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

    
por 21.09.2012 / 20:55
9

A SOLUÇÃO MAIS RECENTE

  • Alterar o usuário executando a tarefa para SYSTEM - executará seu comando não sob seu usuário
  • Marcar a opção "Executar se o usuário está conectado ou não" - exige salvar a senha com a tarefa e interromper ocultamente as alterações de senha da próxima vez (o que geralmente é aplicado pelas diretivas de domínio em ambientes corporativos)

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

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

Salve isso como arquivo js (myjob.js) e adicione isso ao agendador de tarefas: Aproveite

    
por 10.02.2016 / 18:29
2

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

    
por 18.03.2014 / 04:12
1

Ambos:

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

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

    
por 22.09.2015 / 13:47
0

Eu estava tendo esse problema com as tarefas agendadas do PowerShell (que eu estava implantando por meio do GPO). Acabei por envolvê-lo em uma janela de comando:

CMD
/Q /D /C "powershell.exe -Command "& '\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""
    
por 03.06.2016 / 00:21
0

Deixo as configurações padrão e escrevo programas personalizados curtos que geram a execução sem uma janela. Por exemplo, para executar um arquivo em lotes sem abrir uma janela de prompt de comando, use o código abaixo. Definir 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());
        }
    }
}
    
por 20.06.2018 / 23:20