Add scheduled task and run even if on battery power
Just wanted to share a little helpful snippet in case anyone needs it. To add a scheduled task and make sure it starts even when on battery power do this:
using (var taskService = new TaskService())
{
TaskDefinition task = taskService.NewTask();
var action = new ExecAction
{
Path = "test.exe",
Arguments = "",
WorkingDirectory = ""
};
task.RegistrationInfo.Description = "Test";
var trigger = new TimeTrigger(DateTime.Now);
trigger.Repetition.Interval = TimeSpan.FromMinutes(5);
task.Triggers.Add(trigger);
task.Actions.Add(action);
task.Settings.DisallowStartIfOnBatteries = false;
task.Settings.StopIfGoingOnBatteries = false;
// Register the task in the root folder
taskService.RootFolder.RegisterTaskDefinition("test", task, TaskCreation.CreateOrUpdate, "SYSTEM", null, TaskLogonType.ServiceAccount, null);
}
TaskService is part of Microsoft.Win32.TaskScheduler
.
By default when you create a new task DisallowStartIfOnBatteries
and StartIfGoingOnBatteries
are true, so that’s something to keep in mind if you are writing code that can be deployed on a laptop and you must have your scheduled task continue to run.
Quick side note, I personally think negative property names are hard to follow (DisallowStartIfOnBatteries
). It’s hard to follow when it becomes a double negative. I think it would’ve been much better to name the property
AllowStartOnBatteries
Especially since it has nothing to do with starting the task when its not on batteries. It’s interesting that the UI control for this doesn’t use a double negative to display the context (even though the phrasing is logically inverse). Still, case in point