并详细告诉我“无论用户是否登录都运行”。避免将来运行创建的任务的障碍(有关用户名和密码的详细信息)
问问题
7062 次
3 回答
5
要使用以下设置在 taskscheduler 中创建任务:“运行用户是否登录”使用以下代码:
var taskDefinition = taskService.NewTask();
taskDefinition.RegistrationInfo.Author = WindowsIdentity.GetCurrent().Name;
taskDefinition.RegistrationInfo.Description = "Runs Application";
// TaskLogonType.S4U = run wether user is logged on or not
taskDefinition.Principal.LogonType = TaskLogonType.S4U;
var action = new ExecAction(path, arguments);
taskDefinition.Actions.Add(action);
taskService.RootFolder.RegisterTaskDefinition("NameOfApplication", taskDefinition);
注意:我在这里不使用触发器。您可以使用以下代码直接从代码启动创建的任务:
//get task:
var task = taskService.RootFolder.GetTasks().Where(a => a.Name == "NameOfApplication").FirstOrDefault();
try
{
task.Run();
}
catch (Exception ex)
{
log.Error("Error starting task in TaskSheduler with message: " + ex.Message);
}
于 2016-06-16T06:16:57.387 回答
4
您可以将 UserId 设置为SYSTEM
,它会自动设置选项“无论用户是否登录都运行”。
using (TaskService ts = new TaskService())
{
var newTask = ts.NewTask();
newTask.Principal.UserId = "SYSTEM";
newTask.Triggers.Add(new TimeTrigger(DateTime.Now));
newTask.Actions.Add(new ExecAction("notepad"));
ts.RootFolder.RegisterTaskDefinition("NewTask", newTask);
}
执行上述代码的程序必须以管理员身份运行。
在这里的评论中找到了这个解决方案,http ://taskscheduler.codeplex.com/wikipage?title=Examples
于 2014-06-24T15:56:23.040 回答
3
ITaskFolder rootFolder = taskService.GetFolder(@"\");
rootFolder.RegisterTaskDefinition(taskName,
taskDefinition,
(int)_TASK_CREATION.TASK_CREATE_OR_UPDATE,
null,
null,
_TASK_LOGON_TYPE.TASK_LOGON_S4U,
null);
我只是尝试使用所有 _TASK_LOGON_TYPE 并发现“TASK_LOGON_S4U”可用于设置无论用户是否登录都运行。有关 TaskScheduler 的详细信息http://msdn.microsoft.com/en-us/library/windows/desktop/bb736357(v=vs.85).aspx
于 2014-06-26T01:41:22.060 回答