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


37

我有一个守护进程,我每小时在机器上运行一次,即使我选中了该Hidden框,它也无法正常工作。任务属性

任务每小时运行一次,但是会显示黑色的命令窗口,其中正在运行我的.NET Console应用程序。这将保持可见状态,直到任务完成,然后消失。这很烦人,因为它会弹出并打断我在做什么:

在此处输入图片说明

我真的希望它隐藏起来,那么如何解决这个问题?



2
链接的问题未提及“ 隐藏” 设置。
bwDraco 2012年

@DragonLord您是正确的,但是很难说出这个问题是“为什么不隐藏工作?”,或者实际上是“我如何阻止此框显示?”。
Ƭᴇcʜιᴇ007

@ techie007:问题如何隐藏窗口,这就是我认为隐藏复选框所要做的。但是,该链接文章涉及脚本以及命令行任务计划程序和外壳程序脚本,而不是我的帖子中显示的任务计划程序GUI。您知道如何使用GUI来完成此任务吗?
约书亚·弗兰克

在大多数情况下,您不能仅通过Task Scheduler GUI进行操作。通常,您需要修改任务的操作正​​在运行的内容(例如:批处理文件或脚本),以隐藏弹出的子窗口。这就是其他问题所要解决的问题,这就是为什么我将其标记为可能的欺骗。:)
Ƭᴇcʜιᴇ007

Answers:


45

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


4
就如此容易。这个答案应该是公认的。
rolve

谢谢。我有相反的问题。我希望显示控制台,但不是!
Randy Stegbauer 2014年

12
这需要在任务中保存密码,并且下次密码更改(通常由企业环境中的域策略强制执行)时会隐式中断密码。
菲利普·穆宁

@PhilippMunin在某些情况下,您可以勾选“不存储密码”复选框,从而摆脱困境。该任务将只能访问本地计算机资源。”,这将避免提供密码。
Jimadine

20

为什么Windows 7计划的任务运行处于隐藏状态?应该解释为什么会这样。

此外,此TechNet对“ 常规任务属性”的描述还指出:

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

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

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

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

这是否意味着复选框仅在计划程序的UI中隐藏了任务本身,而不是计划的实际程序?


它的确听起来像那样,但是也没有那样。我可以在Scheduler中看到任务。这将是一个奇怪的UI,可以处理您看不到的对象。
约书亚·弗兰克

2
您是否在“查看”菜单中选中了“ 显示隐藏的任务”
卡兰2012年

1
啊,我做到了,所以可以解释。谢谢。当然,由于“隐藏”并没有达到我的预期,因此我不需要隐藏的任务。由于这是仅限管理员使用的工具,并且由于管理员通常不希望将事物隐藏起来,因此隐藏任务的作用是什么?
约书亚·弗兰克

2
谁知道,当然从未使用过该选项。您的问题是我第一次查询它的功能。:)顺便说一句,不是将用户更改为SYSTEM,而是选择“运行用户是否已登录”是否解决了该问题?
卡兰(Karan)2012年

18

好的,经过更多研究后,我在StackOverflow上找到了以下答案

要将计划任务设置为在后台运行,请将运行任务的用户更改为SYSTEM,屏幕上将不显示任何内容。

有评论指出,这授予了任务的全部权限,这可能很烦人,但在这种情况下可以接受。

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


阅读以上我的回复,可能会解释它的作用。
卡兰(Karan)2012年

2
SU的回答涉及将其作为其他用户运行的想法,以避免同样看到输出。我认为没有任何特定理由将其作为“系统”运行,您可以使用户仅用于运行该任务,并选择授予他们的权限。
Ƭᴇcʜιᴇ007

但是,为什么配置的用户会影响窗口的可见性?
约书亚·弗兰克

1
请记住,该SYSTEM帐户无权访问其他用户的EFS加密文件。
Zero3 '17

11

最终解决方案

  • 将运行任务的用户更改为SYSTEM-将在您的用户下执行命令
  • 检查“运行用户是否已登录”-需要保存任务的密码,并且在下次密码更改时会隐式中断(通常由企业环境中的域策略强制执行)

如果这些对您来说是破坏交易的方法,则最终的解决方案是创建如下所示的JS脚本文件,该脚本文件将在隐藏窗口中运行命令,等待命令终止并返回其错误代码:

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

保存为js文件(myjob.js),并添加到您的任务调度: 在此处输入图片说明 享受


另外,您应该使用Wscript.exe运行脚本,而不是Cscript。否则,黑色控制台窗口可能会弹出一会儿。
步步高

这是另一个对我有用
步步高

2

“无论用户是否登录都运行”将允许隐藏选项起作用。请注意,选择此选项后需要提供凭据。


1

两者:

  • 将运行任务的用户更改为SYSTEM”
  • 和检查“运行用户是否已登录”

可以防止出现黑色的命令窗口,但请注意其缺点:由于Windows在无头样式环境中启动任务,因此您将无法使用某些GUI自动化工具(如PowerShell中的“ AutoIt”或SendKeys)进行工作。


1

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

1
而我认为制造出来的魔咒是专门由于那ProcessWindowStyle.Hidden部分,对吗?我在这里看到一些事情:msdn.microsoft.com/en-us/library/...
皮条客果汁IT

是的,这就是隐藏窗口的地方。没有它,窗口将会弹出。
AresAvatar

1
编写的代码将在ShellExecute上运行的任何代码上运行。
AresAvatar

0

我在Powershell计划任务中遇到了这个问题(该任务是通过GPO进行部署的)。我最终将其包装在命令窗口中:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""

尽管这可以回答问题,但是如果您可以提供解释为什么会这样做会更好。
DavidPostill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.