Windows 7 任务计划程序隐藏设置不起作用

Windows 7 任务计划程序隐藏设置不起作用

我有一个守护进程,我每小时都会在我的计算机上运行它,尽管我选中了该Hidden框,但它不起作用。任务属性

每小时,任务都会运行,但它会显示黑色命令窗口,其中正在运行我的 .NET 控制台应用程序。该窗口一直可见,直到任务完成,然后消失。这非常烦人,因为它会弹出并打断我正在做的事情:

在此处输入图片描述

我确实希望隐藏它,那么我该如何解决这个问题?

答案1

选中“无论用户是否登录都运行”复选框,可执行文件将在后台运行。

答案2

Windows 7计划任务运行为什么被隐藏?应该解释为什么会发生这种情况。

还,TechNet 对此的描述常规任务属性状态:

任务的常规属性显示在任务属性或创建任务对话框的常规选项卡上。任务的常规属性包括任务名称、作者、说明、安全选项、任务所配置的操作系统、以及控制任务是否隐藏的属性

在任务文件夹中创建任务时,必须为该任务命名。如果两个任务位于同一个任务文件夹中,则它们不能具有相同的名称。任务描述是可选的。

任务安全选项指定任务运行的安全上下文。有关更多信息,请参阅任务安全上下文。

默认情况下,隐藏任务不会显示在任务计划程序用户界面中。在“查看”菜单中选择“显示隐藏任务”后,您可以查看隐藏任务。单击“任务属性”或“创建任务”对话框的“常规”选项卡上的“隐藏”复选框即可隐藏任务。

这是否意味着复选框仅隐藏任务本身来自调度程序的用户界面,而不是实际调度的程序?

答案3

好的,经过进一步研究我发现这个答案在 StackOverflow 上:

要设置在后台运行的计划任务,请将运行任务的用户更改为系统,屏幕上将不会出现任何内容。

一条评论指出这授予了该任务的全部权利,这可能会令人讨厌,但在这种情况下是可以接受的。

但是,Hidden如果它不这样做,那又会怎样呢?为什么运行该程序的用户帐户与它是否可见有关?

答案4

我保留默认设置,并编写简短的自定义程序,这些程序会在不显示窗口的情况下生成执行。例如,要运行批处理文件而不弹出命令提示符窗口,请使用以下代码。将任务设置为生成“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());
        }
    }
}

相关内容