我有一个守护进程,我每小时在机器上运行一次,即使我选中了该Hidden
框,它也无法正常工作。
任务每小时运行一次,但是会显示黑色的命令窗口,其中正在运行我的.NET Console应用程序。这将保持可见状态,直到任务完成,然后消失。这很烦人,因为它会弹出并打断我在做什么:
我真的希望它隐藏起来,那么如何解决这个问题?
我有一个守护进程,我每小时在机器上运行一次,即使我选中了该Hidden
框,它也无法正常工作。
任务每小时运行一次,但是会显示黑色的命令窗口,其中正在运行我的.NET Console应用程序。这将保持可见状态,直到任务完成,然后消失。这很烦人,因为它会弹出并打断我在做什么:
我真的希望它隐藏起来,那么如何解决这个问题?
Answers:
为什么Windows 7计划的任务运行处于隐藏状态?应该解释为什么会这样。
此外,此TechNet对“ 常规任务属性”的描述还指出:
任务的常规属性显示在“任务属性”或“创建任务”对话框的“常规”选项卡上。任务的常规属性包括任务名称,作者,描述,安全性选项,为任务配置的操作系统以及控制任务是否隐藏的属性。
在任务文件夹中创建任务时,必须命名任务。如果两个任务位于同一任务文件夹中,则不能使用相同的名称。任务描述是可选的。
任务安全性选项指定任务在其下运行的安全性上下文。有关更多信息,请参见任务安全性上下文。
默认情况下,隐藏的任务不会显示在“任务计划程序”用户界面中。在“查看”菜单中选择“显示隐藏的任务”时,您可以查看隐藏的任务。当您单击“任务属性”或“创建任务”对话框的“常规”选项卡上的“隐藏”复选框时,将使任务隐藏。
这是否意味着复选框仅在计划程序的UI中隐藏了任务本身,而不是计划的实际程序?
好的,经过更多研究后,我在StackOverflow上找到了以下答案:
要将计划任务设置为在后台运行,请将运行任务的用户更改为SYSTEM,屏幕上将不显示任何内容。
有评论指出,这授予了任务的全部权限,这可能很烦人,但在这种情况下可以接受。
但是Hidden
,如果不这样做,该怎么办?为什么运行该程序的用户帐户是否与可见帐户有关?
SYSTEM
帐户无权访问其他用户的EFS加密文件。
最终解决方案
如果这些对您来说是破坏交易的方法,则最终的解决方案是创建如下所示的JS脚本文件,该脚本文件将在隐藏窗口中运行命令,等待命令终止并返回其错误代码:
WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);
我保留了默认设置,并编写了简短的自定义程序,这些程序在不显示窗口的情况下产生了执行结果。例如,要运行批处理文件而不弹出命令提示符窗口,请使用以下代码。将任务设置为生成“ 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());
}
}
}
ProcessWindowStyle.Hidden
部分,对吗?我在这里看到一些事情:msdn.microsoft.com/en-us/library/...
我在Powershell计划任务中遇到了这个问题(该任务是通过GPO进行部署的)。我最终将其包装在命令窗口中:
CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""