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

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

Eu tenho um processo daemon que executo na minha máquina a cada hora e, mesmo marcando 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á em execução. Isso permanece visível até que a tarefa seja concluída e depois desaparece. Isso é muito chato, porque aparece e interrompe tudo o que estou fazendo:

insira a descrição da imagem aqui

Eu realmente quero isso escondido, então como posso consertar isso?

Responder1

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

Responder2

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

Também,esta descrição do TechNet dePropriedades Gerais da Tarefaafirma:

As propriedades gerais de uma tarefa são exibidas na guia Geral das Propriedades da Tarefa ou na caixa de diálogo 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 poderão 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 sob o qual a tarefa é executada. Para obter mais informações, consulte Contexto de segurança da tarefa.

Por padrão, as 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 estiver selecionado no menu Exibir. Você oculta uma tarefa ao clicar na caixa de seleção Oculto na guia Geral das Propriedades da Tarefa ou na caixa de diálogo Criar Tarefa.

Isso não implica que a caixa de seleção apenas ocultaa tarefa em sida interface do agendador e não do programa real agendado?

Responder3

Ok, depois de mais algumas pesquisas, descobriesta respostano StackOverflow:

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

Um comentáriosalienta que isto confere plenos direitos à tarefa, o que pode ser irritante, mas é aceitável neste caso.

Mas ainda assim, o que Hiddenacontece se não fizer isso? E por que a conta do usuário que executa o programa teria algo a ver com a visibilidade dele?

Responder4

Deixo as configurações padrão e escrevo pequenos programas personalizados que geram a execução sem que uma janela seja exibida. Por exemplo, para executar um arquivo em lote sem abrir uma janela de 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());
        }
    }
}

informação relacionada