I have adapted one of my test codes by adding MonthlyTrigger, using TaskScheduler 1.1 Type Library (there is no DaysOfWeek, only DaysOfMonth)
This test works on my Windows 10 OS =>
// To check the task : "C:\WINDOWS\system32\mmc.exe" "C:\WINDOWS\system32\taskschd.msc" /s
// Add reference to : TaskScheduler 1.1 Type Library
// Add : using TaskScheduler;
ITaskService ts = new TaskScheduler.TaskScheduler();
try
{
ts.Connect(null, null, null, null);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Error : " + ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
ITaskDefinition td = ts.NewTask(0);
td.RegistrationInfo.Author = "Task Author";
td.RegistrationInfo.Description = "Task Description";
//ITimeTrigger tt = (ITimeTrigger)td.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
//tt.Enabled = true;
//tt.StartBoundary = (DateTime.Now.AddSeconds(60)).ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
//tt.Repetition.Interval = "PT1M";
CultureInfo cultinfo = new CultureInfo("en-US");
DateTime startDate = Convert.ToDateTime("04-01-2021 12:10:15 AM", cultinfo);
DateTime endDate = Convert.ToDateTime("04-01-2022 12:10:15 AM", cultinfo);
// https://learn.microsoft.com/en-us/windows/win32/taskschd/monthlytrigger
IMonthlyTrigger mt = (IMonthlyTrigger)td.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_MONTHLY);
mt.StartBoundary = startDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
mt.EndBoundary = endDate.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss");
mt.DaysOfMonth = 0x20000000 | 0x40000000; // 30 and 31
//mt.MonthsOfYear = MonthsOfTheYear.AllMonths;
mt.MonthsOfYear = 0X400 | 0X800; // November and December
td.Settings.MultipleInstances = _TASK_INSTANCES_POLICY.TASK_INSTANCES_PARALLEL;
IExecAction execAction = (IExecAction)td.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_EXEC);
execAction.Path = @"c:\windows\notepad.exe";
var rootFolder = ts.GetFolder("\\");
try
{
IRegisteredTask ticket = rootFolder.RegisterTaskDefinition("MyNewTask", td, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_INTERACTIVE_TOKEN, null);
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show("Could not add a task : " + ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}