任务计划程序托管包装器不显示所有任务
Posted
技术标签:
【中文标题】任务计划程序托管包装器不显示所有任务【英文标题】:Task Scheduler Managed Wrapper does not show all tasks 【发布时间】:2016-09-05 08:58:53 【问题描述】:我创建了一个简单的 Windows 窗体应用程序,它显示机器上所有计划任务的名称和文件夹。我正在使用任务计划程序托管包装器(Microsoft.Win32.TaskScheduler),下面是获取名称并显示它们的代码。但是,似乎 AllTasks 实际上并没有给我所有任务。有一些没有显示。在这种情况下,什么可能导致任务被隐藏?
using (TaskService tsksrvs = new TaskService())
foreach (Task tsk in tsksrvs.AllTasks)
textJobsList.Text += tsk.Name + " (" + tsk.Folder + ")" + Environment.NewLine;
【问题讨论】:
那么,哪些任务是隐藏的?也许是其他用户的? @nvoigt 你是对的。问题似乎是任务是由另一个用户而不是运行代码的用户运行的。谢谢! 【参考方案1】:对象Microsoft.Win32.TaskScheduler.TaskService
的属性AllTasks
仅返回任务.Definition.Principal.UserId
为任一的Windows 调度程序任务
运行程序的用户或系统或网络服务或本地服务或为空。顺便说一句,Definition.RegistrationInfo.Author
属性的值无关紧要。
如果您需要为所有用户获取所有任务,您可以通过以下代码完成:
using Microsoft.Win32.TaskScheduler;
using System.Diagnostics;
using System.Text.RegularExpressions;
......................................
Task[] allTasks = TaskService.Instance.FindAllTasks(new Regex(".*")); // this will list ALL tasks for ALL users
foreach (Task tsk in allTasks)
//Do whatever you need here, for example:
Debug.WriteLine("TaskName:0; Path:1; Author:2; Principal: 3; ", tsk.Name, tsk.Path, tsk.Definition.RegistrationInfo.Author, tsk.Definition.Principal.UserId);
【讨论】:
【参考方案2】:正如@nvoigt 在上面指出的那样,不可见的任务正在以与执行代码的用户不同的用户身份运行。
【讨论】:
如果您的应用以管理员身份运行,您可能会看到它们。 我也遇到了同样的问题,但是 .FindAllTasks(new RegEx(.*)) 也没有找到它们(在 LINQPad 中测试)。在 .FindAllTasks(...) 返回我正在寻找的任务之前,我必须以管理员身份运行 LINQPad。 FindAllTasks 方法的参数为任意值,只会查找系统确定当前账户有权查看的任务。注册时默认编写的每个任务实际上都有ACL。如该线程所述,要查看所有任务,您必须拥有所有权限,即管理员身份。以上是关于任务计划程序托管包装器不显示所有任务的主要内容,如果未能解决你的问题,请参考以下文章