如何使用“无论用户是否登录都运行”在任务计划中创建任务

Dha*_*ran 4 c# scheduled-tasks

并详细告诉我“无论用户是否登录都运行”。避免将来运行创建的任务时遇到障碍(有关用户名和密码的详细信息)

Des*_*tar 5

您可以将 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);
}
Run Code Online (Sandbox Code Playgroud)

执行上述代码的程序必须以管理员身份运行。

在这里的评论中找到了这个解决方案,http://taskscheduler.codeplex.com/wikipage?title= Examples


Eph*_*dra 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);
Run Code Online (Sandbox Code Playgroud)

注意:我在这里不使用触发器。您可以使用以下代码直接从代码启动创建的任务:

                    //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);
                    }
Run Code Online (Sandbox Code Playgroud)